Jef*_*rey 2 java variables multithreading
我有一个函数可以启动几个线程(它是一个测试函数),其中一个线程会改变变量的状态.由于局部变量不能标记为volatile,我假设该方法中的多个线程将始终具有变量的更新状态.它是否正确?这是示例代码
public void someMethod() {
MutableBoolean mb = new MutableBoolean(false);
Thread t1 = new Thread() {
public void run() {
while (someCondition) {
if ( mb.getValue() ) {
...do something
}
}
}
}
t1.start();
Thread t2 = new Thread() {
public void run() {
if ( someCondition ) {
mb.setValue(true);
}
}
}
t2.start();
...wait for the threads to complete
Run Code Online (Sandbox Code Playgroud)
}
除非MutableBoolean在其set/get值方法中使用锁,否则它是一个原子操作,那么这不是线程安全的.
getValue可能正在读取值,而setValue正在更新它.你可能会用布尔值来解决这个问题,但对于任何更复杂的类型,它可能会失败.
锁定对共享状态的访问以使其线程安全.