线程池,怎么停止线程池中的线程?
1.自然终止。
你的线程执行完它启动时运行的方法,就自然终止了。适用于单个或多个一次性任务。如果是多个,这种情况推荐线程池。把任务写成线程池的Task。
2.有个管理线程,去调用工作线程的workingThread.Interrupt()方法。前提是,用一些同步机制防止工作线程的工作做一半被扔那了。
这种办法适用于循环等待某些任务的线程,比如TCPListener的循环Accept的线程或者其它响应消息的线程,或者接收/处理心跳消息的线程。
如何从一个线程中关闭另一个线程?
如果需要只终止某个线程而不终止整个进程,可以有三种方法:
1.从线程函数return。这种方法对主线程不适用,从main函数return相当于调用exit。
2.一个线程可以调用pthread_cancel终止同一进程中的另一个线程。
3.线程可以调用pthread_exit终止自己。
怎么优雅的关闭线程?
有三种方法关闭线程:
1.设置退出标志,使线程正常退出,也就是当run()方法完成后线程终止。
2.使用interrupt()方法中断线程。
3.使用stop方法强行终止线程(不推荐使用,Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经被废弃,使用它们是极端不安全的!)
身为一个程序员,如何优雅的结束一个线程?
谢谢邀请!
早期的jdk版本中提供了退出的方法:hread.stop, Thread.suspend, Thread.resume和Runtime.runFinalizersOnExit ,因为操作不安全,可能会出现不可控的结果,已不推荐使用。
在回答之前咱们先看下线程的几个状态和状态切换的过程,如下图(不想画了,网上盗图):
线程退出肯定是初始化后的任何一个状态(不包含终止态)退出。
线程启动后是独立运行的,正常来说启动后是无法干预运行的,只能等其正在运行结束,如果想要干预,只能在共享内存区加状态标识,其实jdk已经内置了一个状态标识就是中断标识,调用中断方法,但是waiting状态的线程会抛出中断异常,自己可以再优化下加共享状态变量。
总结一下有三种方法:
1、等线程自己执行完结束(这种最优雅,但是也没有讨论的意义了)。
2、调用中断方法,判断中断标识。但是waiting状态下会抛异常,不能算作优雅,示例代码如下:
3、自己加中断状态标识,示例代码如下:
总结下:
waiting状态:此状态下退出只能调用中断方法。
blocked状态:分两种,一种可中断,调用中断方法退出;一种不可中断,只能等running后退出。
ready状态:等cpu调度,不可干预。
running状态:自己加共享状态标识。
所以最终“优雅退出”代码如下:
首先谢谢邀请
在本文中,我们将讨论结束Java线程的简洁方法,这是必要的,因为Java已经弃用了Thread.stop()方法。
Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit由于一些潜在的线程安全问题, Oracle已弃用 。很少有公认的和广为接受的方法来实现这一点,在本文中,我们将讨论2 个用Java结束线程的方法。
- 使用标志
- 中断线程。
1.使用标志
一种简单的方法是使用线程来指示线程是否正在运行,并使用此标志根据您的要求采取纠正措施,下面是一个示例代码,概述了如何使用标志来杀死Java线程。
在上面的例子中。我们可以通过将运行变量设置为false来控制执行。在我们的示例中,我们使用AtomicBoolean了并发,如果您不想使用它(不推荐),您需要确保Boolean您在代码应该是易变的。可以使用 volatile代替他。
2.中断线程
以上代码看起来不错,但在采取上述方法之前需要考虑一些要点
- 如果我们有很多线程,它将变得更加复杂,我们需要确保使用join()方法完成这些线程。
- 我们真的需要定义一个布尔标志,因为Java已经使用中断标志提供了这个功能吗?
在这个代码块中有几件非常重要的事情
- 我们不会吞下异常,而是将其传递给系统,以确保系统根据此异常采取纠正措施
在上面的例子中,我们捕获InterruptedException并立即用于立即 Thread.currentThread().interrupt() 中断我们的线程。这是必需的,因为一旦抛出异常就中断了中断标志,并且如果我们的代码在嵌套循环中运行,它可能会导致一些问题。
总而言之,如果你仍然想要使用标志方法,那么Thread.interrupt()结束java线程的首选/推荐方法是你可能必须等待所有阻塞操作完成才能使用基于标志的逻辑。
文版权归是三僡然所有,转载请标明出处。欢迎转载,欢迎评论,欢迎分享。如果你有文章想分享可以联系我。