这应该是不稳定的还是不可预测的结果?

Jim*_*Jim 1 java concurrency multithreading volatile

变量中是否volatile需要kill控制线程的执行?

public class MyThread extends Thread{  

  private boolean kill = false;  

  public void killThread(){  
      kill = true;  
  }  

  @Override  
  public void run(){  
     while(!kill){  
                 //do stuff  
     }  
  }  

}  
Run Code Online (Sandbox Code Playgroud)

例如,如果在代码的其他部分(另一个线程),我theThreadRef.killThread();应该期望线程停止或由于没有声明为不可预测的结果?由于我更新了via 方法,因此我不确定. 谢谢 killvolatilekillkillThread

Mar*_*nik 9

是的,kill是线程之间共享的变量,必须是volatile.但是,请考虑使用Java的本机中断机制,涉及Thread.interrupt()Thread.interrupted()实现您的需求.那么你不需要保留自己的变量.

  • 更新确实是原子的,但没有`volatile`,读取线程不能保证它. (2认同)