嗨我正在尝试使用一个线程编写一个每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;
}
}
答案 0 :(得分:3)
在这种情况下,如果你改写成这样的话,你只有一个原语作者
clock = 1 - clock;
或
clock ^= 1;
在这种情况下,您所需要做的就是使字段变得易变。如果您有多个编写器,或更新多个字段或非基本字段,则需要使用synchronized或Lock。
还有其他方法可以避免锁定,但是你如何做到这一点是特定的情况。
在你遇到的情况下,因为你更新了两次字段,你需要使用正确的锁或同步。