Поскольку ответ на раньше случался между потоками и атомарной переменной , состоял в том, что утверждения не выполняются, мне нужна альтернативная реализация.Thread1 и Thread2 обновляют целые числа t1 и t2 соответственно.Как только они обновлены, никакие другие обновления не происходят к t1 или t2.Значения, назначенные для t1 и t2, поступают из общего счетчика, который увеличивается после каждого назначения.Мне нужно убедиться, что следующие утверждения верны:
int cnt=0;
ReentrantLock lock = new ReentrantLock();
volatile Integer t1=null;
volatile Integer t2=null;
//Thread1
lock.lock();
try{t1=cnt++;}finally{lock.unlock();}
if(t2 == null){
assert t2==null || t2>t1;
}
//Thread2
lock.lock();
try{t2=cnt++;}finally{lock.unlock();}
if(t1==null){
assert t1==null || t1>t2;
}
Вопрос в том, имеют ли место утверждения?Требуется ли энергозависимость на t1 и t2, как показано?Есть ли лучший / правильный способ сделать это?