java终止线程的通用机制

线程终止详解
本文介绍了一种通过在Runnable实现类中添加cancel()方法和取消标志来提示线程终止的方法。虽然这种方法不能直接终止线程,但配合Executor类的shutdown()方法可以有效地控制线程的结束。

      

 线程的终止其实很简单,只要在实现Runnable的类中添加cancel()方法和cancel标记。如:
       private static volatile boolean canceled = false;
       public static void cancel(){ canceled = true;}
       注意,这里是volatile标记的static布尔值,因为这是接下来的方法中都会用到的,而且其值的变化会对它们产生影响,所以是static。volatile就像之前说过的,标记这个布尔值为共享的,使得接下来的与其有直接或者间接的synchronized方法都能看到它的变化,然后就是设置一个方法cancel(),基本上这个方法都是使canceled的值为true,如:
       public static void cancel(){ canceled = true;}
       然后在run()方法中都会针对canceled的值的情况作出相应的处理,一般都会有提示该线程停止的输出提示。
       其实上面的,都只是该停止线程的提示而已,并没有真正意义上的终止线程的作用,只不过当我们调用cancel()方法是为了告诉用户,我这里就要终止线程了,并且要终止那个线程,能够终止线程的,还是Executor类的shutdown()这个方法。
       这里有个疑问,就是有shutdown()和shutdownNow(),它们有什么区别呢?照我的理解,就是线程的关闭并不是马上的,而调用shutdownNow()可以马上关闭,那么到底该选哪个呢?我觉得,这只是性能上的小小优化而已,不必过于在意,而且有时候马上关闭线程还会影响其他线程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值