函数内的多线程变量访问

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)

}

Gle*_*len 6

除非MutableBoolean在其set/get值方法中使用锁,否则它是一个原子操作,那么这不是线程安全的.

getValue可能正在读取值,而setValue正在更新它.你可能会用布尔值来解决这个问题,但对于任何更复杂的类型,它可能会失败.

锁定对共享状态的访问以使其线程安全.