Являются ли переменные Java сами по себе потокобезопасными? При обновлении переменных? [Дубликат]
На этот вопрос уже есть ответ здесь:
Потокобезопасная установка переменной (Java)? 5 ответовПредположим, у меня есть два потока, обновляющих объект, и один поток, считывающий этот объект без синхронизации. Очевидно, это условие запуска. Тем не менее, мне интересно, если сама переменная может быть написана только частично.
public class CommonObject extends Object
{
static int memberVar=-1;
}
public class Input1Thread extends Thread
{
public void run()
{
while(true)
CommonObject.memberVar = 1
}
}
public class Input2Thread extends Thread
{
public void run()
{
while(true)
CommonObject.memberVar = 2;
}
}
public class OutputThread extends Thread
{
public void run()
{
while(true)
System.out.println("CommonObject.memberVar"+ CommonObject.memberVar);
}
}
Я бы предположил, что распечатанное значение также будет либо 2, либо 1. Однако мне было интересно, возможно ли, чтобы переменная была установлена наполовину?
Я использовал примитивы в качестве примера, но я хотел бы, чтобы ответ был также для объектов, если он отличается.