【发布时间】:2015-02-23 10:20:20
【问题描述】:
在这个程序中,对象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();
}
}
【问题讨论】:
-
你想达到什么目的?
-
不,不是。您正在从不同的线程访问状态而没有同步。所以你会遇到可见性问题。
-
这取决于你想要什么。如果你想实现互斥,那么你必须同步它..
标签: java synchronization synchronized