java线程暂停用什么_如何优雅地停止java线程?

使用标志停止线程的坏处在于,如果线程正在等待或处于休眠状态,则必须等待它完成等待/休眠。如果您调用线程上的中断方法,那么这将导致等待或睡眠调用与InterruptedException一起退出。

(标志方法的第二个缺点是,大多数非平凡的代码都将使用java.util.current这样的库,其中的类是专门设计用来使用中断来取消的。在传递给Executir的任务中使用手摇标志将很尴尬。)

调用中断()还设置一个中断属性,您可以使用该属性作为标志来检查是否退出(在线程没有等待或休眠的情况下)。

您可以编写线程的Run方法,以便在线程正在执行的循环逻辑之外捕获InterruptedException,或者在循环中捕获异常并接近抛出异常的调用,为InterruptedException在CATCH块中设置中断标志,这样线程就不会忘记它被中断的事实。中断的线程仍然可以根据自己的条件保持控制和完成处理。

假设我想编写一个确实以增量方式工作的工作线程,其中由于某种原因在中间有睡眠,而且我不希望放弃睡眠以使处理退出而不为该增量执行剩余的工作,我只希望它在增量之间的情况下退出:class MyThread extends Thread{

public void run()

{

while (!Thread.currentThread().isInterrupted())

{

doFirstPartOfIncrement();

try {

Thread.sleep(10000L);

} catch (InterruptedException e) {

// restore interrupt flag

Thread.currentThread().interrupt();

}

doSecondPartOfIncrement();

}

}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值