如何终止一个线程 如何从一个线程中关闭另一个线程?
如何从一个线程中关闭另一个线程?
如果您只需要终止一个线程而不终止整个进程,有三种方法:
1。从线程函数返回。此方法不适用于主线程。从main函数返回等同于调用exit。
2. 一个线程可以调用pthreaducancel来终止同一进程中的另一个线程。
3. 线程可以调用pthread Exit终止自身。
身为一个程序员,如何优雅的结束一个线程?
感谢您的邀请
!在回答之前,让我们先看看线程的几种状态以及状态切换的过程,如下图所示(我不想画,在线盗窃):
线程退出必须是初始化后的任何状态(不包括终止状态)退出。
线程在启动后独立运行。正常情况下,他们不能在启动后进行干预。他们只能等待跑步的结束。如果他们想干预,他们只能在共享内存区域中添加一个状态标识符。实际上,JDK已经有了一个内置的状态标识符,即中断标识符。它调用中断方法,但是处于等待状态的线程将抛出中断异常,并且它可以优化add状态变量。
总结起来,有三种方法:
1。等待线程完成自己的执行(这是最优雅的,但没有讨论的意义)。
2. 调用中断方法判断中断标识。但是,在等待状态下,会抛出异常,不能认为是优雅的。示例代码如下:
3。自己添加中断状态标志。示例代码如下:
摘要:
等待状态:在此状态下,exit只能调用中断方法。
阻塞状态:有两种类型:一种是可中断的,调用中断方法退出;另一种是不可中断的,只有运行后才能退出。
就绪状态:等待CPU调度,无干预。
运行状态:添加您自己的共享状态标识符。
最后的“优雅退出”代码如下:
如何快速终止线程?
终止线程的三种方法:
1。使用exit标志使线程正常退出,即当run方法完成时,线程将终止。
2. 使用stop方法强制终止线程(不建议使用此方法,因为stop与suspend和resume一样,可能会产生意外的结果)。
3. 用中断方法中断线程。1使用exit标志终止线程。run方法完成后,线程将退出。但有时run方法永远不会结束。例如使用线程来侦听服务器程序中的客户机请求,或者其他需要循环处理的任务。在这种情况下,这些任务通常放置在一个循环中,例如while循环。如果希望循环永远运行,可以使用while(true){}来处理它。但是,如果要使while循环在特定条件下退出,最直接的方法是设置布尔类型标志,并通过将该标志设置为true或false来控制while循环是否退出。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。