正确结束Java线程的方法
很简单地设置一个标志位,名称就叫做isCancelled。启动线程后,定期检查这个标志位。如果isCancelled=true,那么线程就马上结束。注意的是,isCancelled需要为volatile,保证线程读取时isCancelled是最新数据。Java提供了中断机制,Thread类下有三个重要方法。每个线程都有个boolean类型的中断状态。因为抛出InterruptedException后,中断标记会被重新设置为false!下面的例子扩展了上面的InterruptedExample,要求线程在限定时间内得到结果,否则触发超时停止。Future的get方法可以传入时间,如果限定时间内没有得到结果,将会抛出TimeoutException。线程要正确响应中断,才能真正被cancel。线程池的shutdownNow()会尝试停止池内所有在执行的线程,原理也是发出中断请求。
用户评论