如何检查线程中主线程的变量?

时间:2017-06-01 07:16:43

标签: java multithreading

我有一个正在运行的线程:

public boolean shouldStopThread = false;

        new Thread(new Runnable() {
          @Override
          public void run() {
              try {

                   if(!shouldStopThread )
                     {
                      // Do my stop here
                     }
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
          }
      }).start();

问题是当我将布尔值从false更改为true时,未在线程中检测到更改。

如何在线程中获取布尔值以检测更改?

3 个答案:

答案 0 :(得分:3)

由于您的布尔值 volatile,因此无法保证在所有线程中立即更改。

如果您将其声明为volatile,则可以保证每次更改该值时,都会在所有线程中看到它。

答案 1 :(得分:2)

您可以使用AtomicBoolean。它就像一个boolean但它的值以原子方式更新

答案 2 :(得分:1)

你的线程只是检查是否有条件并停止它的执行。您应该在代码中等待或使用无限循环来检查条件:

while(!shouldStopThread )
{
   // Do my stop here
}

Thread.sleep(1000);
if (!shouldStopThread )
{
   // Do my stop here
}

在第二种情况下,您只需1秒即可将shouldStopThread设置为true值。

shouldStopThread应为volatile