本帖最后由 执迷不悟 于 2019-5-21 15:28 编辑
线程状态详解
什么是线程 一个程序同时执行多个任务,每个任务称为一个线程,给人并发处理的感觉。
如果是单一线程,需要等待一个线程执行完毕后,才能执行下一个任务,如果一个类实现了Runnable接口类的run方法,并且使用Thread t = new Thread(r);创建Tread对象 使用t.start();开启线程。就能完成简单的多线程应用,但是这个方法不建议使用,单独创建一个线程的代价太大,我们应该使用线程池
中断线程 使用CurrentTread()返回当前执行线程,使用interrupt中断线程,线程状态将被设置为true,如果这个线程被sleep阻塞,那么就会抛出异常。
线程状态线程有以下6中状态:
新创建(new) 当用new操作符创建一个线程,如new Thread(r),该线程还没有开始运行那么这个线程的状态就是new。
可运行(Runnable) 一旦调用start方法,线程处于runnable状态,一个可运行的线程可能正在运行也可能没有运行,这取决去操作其他给线程提供的运行时间。
被阻塞(Blocked) 当一个线程处于被阻塞和等待状态,它不运行任何代码且消耗的资源最少,当一个线程视图获取一个内部对象锁,而该锁被其他对象持有,则该线程进入阻塞状态,当所有线程释放该锁,并且线程调度器允许本线程持有它的时候,该线程变成非阻塞状态。
等待(Waiting) 当线程等待另一个线程通知调度器一个条件时,这个线程进入等待状态
计时等待(timed Waiting) 有几个方法有一个超时参数,调用它们导致线程进入计时等待状态,这一状态将保持到超时期满或者接收到适当的通知,带有超时参数方法有Tread.sleep和Object.wait、Tread.Jion Lock.Trylock以及Condition.await的计时版。
中止(Terminated) 线程因如下两个原因之一而被中止: 1. run方法正常退出而自然消亡。 2. 因为一个没有捕获的异常终止了run方法而意外死亡。
|