根据Goetz在他的书JCIP:
因为每个线程都有自己的中断策略,所以您不应该中断线程,除非您知道中断对该线程意味着什么。
为什么Java语言提供了一个public interrupt ()方法?这是一个设计缺陷吗?那么谁或者什么应该中断线程呢?
发布于 2012-07-13 11:27:27
他的意思是,如果你不知道一个线程做什么和它是如何工作的,你不应该打断它。因为所有线程都可以被中断,所以在类interrupt()中有一个Thread方法是合乎逻辑的。
对于在错误的地方执行时可能造成“伤害”的许多其他方法,您可以要求相同的方法。方法是工具,程序员必须明智地使用这些工具,才能创建正确工作的程序。
发布于 2012-07-13 11:27:38
我首先建议您阅读Java并发在实践中的应用。
我想,这个问题可以回答你提到的问题。
顺便说一句,让我们看看如何防止线程。通过使用thread类的3种方法中的任何一种,我们可以防止线程执行:
yield()join()sleep()yield()方法暂停当前正在执行的线程,以便给其他具有相同优先级的等待线程一个执行的机会。如果没有等待线程,或者所有等待线程都具有较低的优先级,那么相同的线程将继续执行。生成的线程何时获得执行的机会由其行为依赖于供应商的线程调度程序决定。join(),如果任何执行线程t1在t2上调用join(),即t2.join()立即进入等待状态,直到t2完成其执行。sleep()基于我们的需求,我们可以使线程在指定的时间内处于休眠状态。发布于 2012-07-13 11:45:28
好吧,这不是个缺陷,绝对不是。(然而,像Thread.stop()这样的其他方法确实是这样的)
使Thread.interrupt()更好的是,只有当线程被阻塞/等待/休眠时,它才会影响线程。如果它正在运行,interrupt()只要求线程通过设置状态变量来停止此操作,状态变量可以由Thread.interrupted()或Thread.isInterrupted()查询。
通常,这是让线程从它们的run()方法返回的最佳方法,而不是以任何方式在外部阻止它们。
void run() {
while(!isInterrupted())
//executed
}但是,要小心Thread.interrupted(),因为它清除了中断状态。
https://stackoverflow.com/questions/11469218
复制相似问题