Из Свойство постоянства памяти мы знаем, что: «Действия в потоке перед помещением объекта в любую параллельную коллекцию выполняются до действий после доступа или удаления этого элемента из коллекции в другомthread. "
Означает ли это: если я создаю объект и помещаю его в 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();
}
в один поток:
...........
Complex complex = new Complex(12, "Sam");
SharedQueue.queue.add(complex);
...........
в другой теме
......
Complex complex = SharedQueue.queue.poll();
System.out.printly(complex.getIndex() + ";" + complex.getName());
.............
Будет ли второй поток обязательно видеть свойства объекта complex
?если второй поток извлекает объект и печатает его после того, как первый поток помещает объект в очередь.
Мы знаем, что в обычном случае мы должны синхронизировать объект в многопоточных средах, если он совместно используется.1031 *
Как
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;
}
}