日期:2014-05-20  浏览次数:20735 次

线程中某操作的暂停与继续的求助
求助各位大神,线程类中的变量定义和run()方法中代码如下:
private boolean running = true;
private boolean pause = false;

public void run() {
    while (running) {
if (pause) {
   continue;
} else {
   repaint();
}
try {
   Thread.sleep(150);
} catch (InterruptedException e) {
   e.printStackTrace();
}
    }

}
这样能够通过控制pause的值来完成重画方法的暂停和继续执行,但是while循环的条件中如果直接写成true的话,就无法实现重画方法被暂停后重新执行。这是为什么?二者有什么实质区别?(running的值一直被设成true不会改变,其中只是通过某种方式改变pause的值,请不要考虑while(true)写法是否常规的问题。)
------最佳解决方案--------------------
我测试了,代码没问题,里面写成true也没事。
唯一注意的,那个contine时,最好也sleep一下,否则代码将一直在连续运行,非常耗CPU的。
package test;

import java.util.Scanner;

public class T4 extends Thread {
/**
 * @param args
 */
public static void main(String[] args) {
T4 o = new T4();
o.start();
Scanner s = new Scanner(System.in);
String str;
while (true) {
str = s.next();
if (str.equals("1")) {
pause = true;
} else if (str.equals("0")) {
pause = false;
}
}
}

private boolean running = true;
private static boolean pause = false;

public void run() {
while (true) {
                        // 这里改造了一下
try {
Thread.sleep(150);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (pause) {
continue;
} else {
repaint();
}
}
}

void repaint() {
System.out.println("Painting...");
}
}