求助各位大神,线程类中的变量定义和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...");
}
}