Memory Consistancy Propertyから、次のことがわかります。
これは、あるスレッドでオブジェクトを作成して ConcurrentLinkedQueue に入れると、別のスレッドがオブジェクトのすべてのプロパティを参照し、そのオブジェクトで他の同期が行われないことを意味しますか?
例えば:
public class Complex{
int index;
String name;
public Complex(int index, String name){
this.index = index;
this.name = name;
}
public String getName(){
return name;
}
public int getIndex(){
return index;
}
}
public class SharedQueue{
public static ConcurrentLinkedQueue queue = new ConcurrentLinkedQueue();
}
1つのスレッドで:
…………
Complex complex = new Complex(12, "Sam");
SharedQueue.queue.add(complex);
…………
別のスレッドで
......
Complex complex = SharedQueue.queue.poll();
System.out.printly(complex.getIndex() + ";" + complex.getName());
…………
2 番目のスレッドは確実にcomplex
オブジェクトのプロパティを認識しますか? 最初のスレッドがオブジェクトをキューに置いた後、2 番目のスレッドがたまたまオブジェクトをフェッチして出力した場合。
通常、オブジェクトが共有されている場合は、マルチスレッド環境でオブジェクトを同期する必要があることがわかっています。
お気に入り
public class Complex{
int index;
String name;
public Complex(int index, String name){
this.index = index;
this.name = name;
}
public synchronized String getName(){
return name;
}
public synchronized int getIndex(){
return index;
}
}