У меня есть основной поток, который создает объект с энергонезависимой переменной, а затем в этом потоке я изменяю значение переменной и помещаю объект в BlockingQueue.
Во втором потоке я жду, пока объект не станет доступен и прочитайте объект и его переменную.
Пример кода:
public class ReadCheck {
static BlockingQueue<A> queue = new LinkedBlockingQueue<>();
public static class A {
public int a;
public A(int a) {
this.a = a;
}
}
public static void main(String[] args) throws InterruptedException {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
A a = queue.take();
if (a.a != 20) {
System.out.println(a.a);
}
} catch (InterruptedException e) {
}
}
}
}).start();
while (true) {
A a = new A(10);
a.a = 20;
queue.offer(a);
}
}
}
Во время выполнения примера я никогда не видел, чтобы эта переменная равнялась 10 (это всегда 20).
Это Возможно ли, что я прочитал устаревшее значение (10) переменной во втором потоке в таком случае?
Является ли этот пример кода поток безопасным?