求助各位大神,线程类中的变量定义和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)写法是否常规的问题。)

解决方案 »

  1.   

    我测试了,代码没问题,里面写成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...");
    }
    }