Java俄罗斯方块部分功能求解解决方案

Java俄罗斯方块部分功能求解
请问,下面的程序如何实现暂停与重新开始游戏还有双缓冲技术 !
目前暂停无法实现立即暂停,而且暂停后线程无法重新开启。 
请各位帮帮忙。  






------解决方案--------------------
额 太多了就不想看了。
不过我自己做俄罗斯方块的时候是在线程中run方法里面的while里面加一个 if(boolean变量)(静态的) ,当false就不执行,重新开始的话把数组初始化下就好,这是我的思路哈 ,希望对你有帮助哈!
------解决方案--------------------
Java code
import game.Game;
import game.Global;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.util.Random;

import cn.itcast.tetris.listener.ShapeListener;
import cn.itcast.tetris.view.GamePanel;
public class Shape {

public Game game;
  public GamePanel gamePanel;
    
  public static final int ROTATE =0;
  public static final int LEFT =1;
  public static final int RIGHT =2;
  public static final int DOWN =3;
    
  private int[][] body;
  private int status;
  private int left;
  private int top;
  Image t ;
private ShapeListener listener;
public Thread MyThread = null;
  public void moveLeft(){
left--;
  }
  public void moveRight(){
left++;
  }
  public void moveDown(){
top++;
  }
  public void rotate(){
status = (status +1) % body.length;
  }


  public void drawMe(Graphics g){

  
g.setColor(Color.white);
for (int x =0;x<4;x++) {
for(int y =0; y<4;y++){
if (getFlagByPoint(x,y)){
g.fill3DRect((left +x)*Global.CELL_SIZE,   
(top +y)*Global.CELL_SIZE,
Global.CELL_SIZE,Global.CELL_SIZE,true);

  
}
}
}
  }



private boolean getFlagByPoint(int x, int y) {
return body[status][y*4+x]==1;
  }
  public boolean isMember(int x,int y,boolean rotate){
int tempStatus =status;
if(rotate){
tempStatus =(status +1) % body.length;
}
return body[tempStatus][y * 4 + x]==1;
  }
  public class ShapeDriver implements Runnable{
int x =450;
  
public void run() {
while(listener.isShapeMoveDownable(Shape.this)){
moveDown();
listener.shapeMoveDown(Shape.this);
try {
if(x>200){
Thread.sleep(x-=1);
}
else
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
  }
    
  public Shape(){
MyThread = new Thread(new ShapeDriver());
MyThread.start();
}

public void Shapestop(){
    

Thread.yield();

    
  }
  public void addShapeListener(ShapeListener l){
if(l!=null)
this.listener=l;
  }
  public void setBody(int body[][]){
this.body=body;
  }
  public void setStatus(int status){
this.status=status;
  }
  public int getTop(){
return top;
  }
  public int getLeft(){
return left;
  }
}