在這個程序中,對象jai
被一個線程訪問,同時它也被另一個線程修改。這是正確的工作方式嗎?是否不需要使對象同步?變量的同步
public class SameObjectModification {
private static int i = 0;
private static Jai jai;
static class Jai {
private final int a;
public Jai(int a) {
this.a = a;
}
public void print() {
System.out.println("value ==> " + a);
}
}
public static void main(String[] args) {
Thread t1 = new Thread() {
@Override
public void run() {
while (true) {
if (jai != null)
jai.print();
}
}
};
Thread t2 = new Thread() {
@Override
public void run() {
while (true) {
jai = new Jai(i++);
}
}
};
t1.start();
t2.start();
}
}
你想達到什麼目的? – aioobe 2015-02-23 10:22:09
不,不是。您正在從不同的線程訪問狀態。所以你會有可見性問題。 – 2015-02-23 10:23:39
這取決於你想要的。如果你想實現互斥,那麼你必須同步它。 – 2015-02-23 10:39:06