【发布时间】:2016-02-29 04:19:04
【问题描述】:
假设我有两个线程更新一个对象,一个线程不同步地从该对象读取。显然,这是运行条件。但是,我想知道变量本身是否只能部分写入。
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。但是,我想知道变量是否有可能被设置到一半?
我以原语为例,但如果对象不同,我希望答案也适用于对象。
【问题讨论】:
-
我觉得这个问答比较好。它们也更具体地用于单词撕裂。
标签: java multithreading synchronization thread-safety volatile