JAVA里面如何让一个线程死亡或结束

这问题也是很常见的问题,自打 stop不推荐使用后,我们还有别的可以选择的方法吗?
设置一个标志,让其自动return最安全。 
  1. /**
  2.  * JAVA里面如何使用一个线程死亡或结束.
  3.  * @author 赵学庆,Java世纪网(java2000.net)
  4.  *
  5.  */
  6. public class T {
  7.   public static void main(String[] args) {
  8.     // 启动线程
  9.     MyThread thread = new MyThread();
  10.     new Thread(thread).start();

  11.     // 你的其它的工作,此时线程在运行中

  12.     // 你不想让线程干活了,停掉它
  13.     // 注意,这只是一个标志,具体线程何时停,并不能精确控制
  14.     thread.allDone = true;

  15.   }

  16. }

  17. class MyThread implements Runnable {
  18.   boolean volatile allDone = false;

  19.   public void run() {
  20.     // 每次循环都检测标志
  21.     // 如果设置停止标志时已经在循环里
  22.     // 则最长需要等待一个循环的时间才能终止
  23.     while (!allDone) {
  24.       // 循环里的工作
  25.     }
  26.   }
  27. }

修正,增加了 volatile 关键字,避免多个CPU出问题。

转自:老紫竹的博客

自我补充:volatile 关键字介绍

Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。

这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。

使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值