java - 函数内的多线程变量访问

标签 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

}

最佳答案

除非 MutableBoolean 在其设置/获取值方法中使用锁,或者它是原子操作,否则这不是线程安全的。

getValue 可以在 setValue 更新值时读取该值。您可能会使用 boolean 值来解决此问题,但对于任何更复杂的类型,它可能会失败。

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

关于java - 函数内的多线程变量访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1958461/

相关文章:

javascript - 如何使用 JavaScript 随机化整数变量?

multithreading - 消费者线程不同步,直到生产者完成执行

wpf - "The calling thread must be STA"解决方法

java - 哪里是找到预制、开源、java 包的最佳位置?

java - 最佳架构 - 在 java 中监听 Atom feed 的最佳方式是什么?

java - 使用嵌入式容器测试 EJB。我怎样才能登录?

c++ - 如何在线程退出时触发代码,而不使用函数 *_at_thread_exit?

java - 对 apache 磁贴属性进行逻辑处理

php - 测试数字是奇数还是偶数

Javascript 字符串变量未加引号?