如何暂停线程执行

时间:2011-05-19 12:09:36

标签: java

如何暂停某些Thread的执行。我有Thread t,我有两个按钮,PAUSE和CONTINUE。在暂停时我需要暂停线程执行并继续从之前停止的点开始执行线程。把什么放在听众身上?

5 个答案:

答案 0 :(得分:8)

Java中的线程是合作的,这意味着你不能强制线程停止或暂停,而是向线程发出你想要的信号和线程(=你的逻辑)自己做的。

使用synchronized,wait()和notify()。

  1. 在要停止的线程中创建原子标志(例如布尔字段)。 Stoppable线程在循环中监视此标志。循环必须在synchronized块内。
  2. 当您需要停止线程(按钮单击)时,您可以设置此标志。
  3. 线程看到标志已设置并在公共对象(可能是其自身)上调用wait()
  4. 如果要重新启动线程,请重置标记并调用commonObject.notify()

答案 1 :(得分:0)

我想你可能想看一下针对java.lang.Object的wait()和notify()方法

答案 2 :(得分:0)

等待和等待你可以打电话。等待听起来更接近你想要的。为什么需要暂停某些线程的执行?如果它不是作业,那么可能还有其他解决方案。

答案 3 :(得分:0)

与线程池相同的逻辑。线程在池中的位置,直到它们被调用以执行提交到池的某些操作

答案 4 :(得分:0)

你可以试试这个:

private boolean isPaused = false;


public synchronized void pause(){
    isPaused = true;
}

public synchronized void play(){
   isPaused = false;
   notyfyAll();
}

public synchronized void look(){
   while(isPaused)
      wait();
}

 public void run(){
     while(true){
        look();
        //your code
 }