如何优雅的结束一个线程
如何优雅的结束一个线程
- stop:无论过程走到那一步都会结束,太暴力而且已过时,容易产生数据不一致问题!--不优雅
- volatile:保证线程之间的可见性,用它修饰一个bollean类型的变量,但使用过程中无法精确具体的数据条件,再线程不依赖中间状态时可使用。--较优雅
- interrup:其中(interrup设置标志位,Isinterrup查询标志位,interrupe()重置标志位),这些方法不会干扰到线程,只是设置一个标志位。线程之间可根据具体标志位的标志进行业务中断。使用new ReentrantLock(),lock.lockInterruptibly() 中断线程并抛出异常。--优雅
线程状态注解:
- new 线程刚刚创建,还没有启动
- Runnable 线程运行,刚创建的线程调用start()方法进入Runnable状态,其中又细分为两个状态
- running 正在cpu中运行,在线程被挂起或者调用yeid()方法使线程进入ready状态
- ready 就绪状态,在cpu的等待队列中,在线程被调度器执行时进入running状态
- Waiting 等待被唤醒
- Timed Waiting 隔一段时间后自动唤醒
- Blocked 被阻塞,等待线程锁
- Terminated 结束
其中,执行某些方法进入状态说明:
- 进入timedWaiting状态
Thread.sellp(time)
object.wait(time)
Thread.join(time)
Locksupport.parkNanos()
Locksupport.until() - 进入waiting状态
object.wait();
Thread.join();
Locksupport.park(); - 进入Blocked状态
synchorized(object) 等待进入同步代码块的锁 - 进入Terminated
线程抛出一个异常会进入结束状态
正常运行完且结束
优雅的结束一个线程
本文来自博客园,作者:呵呵哒灬荒唐,转载请注明原文链接:https://www.cnblogs.com/master-chen/p/15241245.html
我喜欢的夏天,是西瓜,短袖和你
浙公网安备 33010602011771号