java线程有stop_java – 如何杀死线程?没有使用stop();

调用stop的替代方法是使用中断来向线程发出信号,希望它完成它的工作。 (这假设你想要停止的线程是很好的行为,如果它忽略了InterruptedExceptions,在它们被抛出后立即吃掉它们,并且不检查中断的状态,那么你回到使用stop()。)

这是我写的一个代码,作为一个线程问题here的答案,这是一个线程中断如何工作的例子:

public class HelloWorld {

public static void main(String[] args) throws Exception {

Thread thread = new Thread(new Runnable() {

public void run() {

try {

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

Thread.sleep(5000);

System.out.println("Hello World!");

}

} catch (InterruptedException e) {

Thread.currentThread().interrupt();

}

}

});

thread.start();

System.out.println("press enter to quit");

System.in.read();

thread.interrupt();

}

}

有些事情要注意:

>中断导致sleep()和wait()立即抛出,否则你被卡住等待睡眠时间通过。

>请注意,不需要单独的布尔标志。

>正在停止的线程通过检查中断的状态并捕获while循环之外的InterruptedExceptions(使用它来退出循环)进行协作。中断是一个可以使用流控制的例外的地方,这就是它的整体。

>在catch块中当前线程上设置中断在技术上是最佳实践,但对于该示例来说是过度的,因为没有其他需要中断标志设置的内容。

关于发布代码的一些意见:

>发布的示例是不完整的,但是引用一个实例变量中的当前线程似乎是一个坏主意。它将初始化为创建对象的任何线程,而不是执行run方法的线程。如果在多个线程上执行相同的Runnable实例,则实例变量大部分时间不会反映正确的线程。>检查线程是否存在必然总是导致true(除非currentThread实例变量引用错误的线程有一个错误),线程#isAlive只有在线程执行完成后才为false, t只是因为它被中断而返回false。>调用线程#中断将导致清除中断标志,这在这里没有任何意义,特别是因为返回值被丢弃。调用Thread#中断的一点是测试中断标志的状态,然后清除它,这是抛出InterruptedException的东西所使用的方便方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值