使用while循环从另一个类的线程打印? (时间不一致)

时间:2014-02-22 06:46:43

标签: java multithreading while-loop

嗨我正在尝试使用一个线程编写一个每500毫秒交替1到0的时钟,并在另一个类中以500毫秒的睡眠速率打印相同的线程。我是'线程新手',需要一些帮助。

public class clockThread extends Thread {

public void run(){
    chipClass3 chip = new chipClass3();

    int clock = 0;
    while(clock<3){
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        clock++;
        clock = clock % 2;

        chip.setClock(clock);
    }
}

}

其他类

    public class chipClass3 {

    private clockThread clck; 
    private int clock = 0 ;

    public chipClass3(){
         clck = new clockThread();
    }

    public static void main(String[]args ){
    chipClass3 chip = new chipClass3();
    new Thread(chip.clck).start();

    chip.printClock();
    }

    private void printClock() {
        while(true){
        System.out.println(getClock());
        }
        }

    public int getClock() {
        return clock;
    }

    public void setClock(int clock) {
        this.clock = clock;
    }



}

1 个答案:

答案 0 :(得分:3)

在这种情况下,如果你改写成这样的话,你只有一个原语作者

clock = 1 - clock;

clock ^= 1;

在这种情况下,您所需要做的就是使字段变得易变。如果您有多个编写器,或更新多个字段或非基本字段,则需要使用synchronized或Lock。

还有其他方法可以避免锁定,但是你如何做到这一点是特定的情况。

在你遇到的情况下,因为你更新了两次字段,你需要使用正确的锁或同步。