1、 线程有6状态:New(新生),Runnable(可运行),Blocked(被阻塞),Waiting(等待),Timed waiting(计时等待),Terminated(被终止)
2、新生线程:已经new,但是尚未被start的线程。
3、可运行线程:调用start方法后,线程进入runnable状态。进入了可运行状态的线程可能正在运行也有肯能没有运行(这就是这个状态叫做"可运行"而不是"运行"的原因),这取决于操作系统给线程提供的运行时间。运行中的线程也属于可运行状态。
4、阻塞或等待线程:当线程处于阻塞或者等待状态时,它暂时不活动,不执行任何代码,消耗最少资源,直到线程调度器重新激活它。进入阻塞或者等待状态的情况:
a、当一个线程试图获取一个内部的锁对象(而不是java.util.concurrent库中的锁),而该锁被其他线程持有,则该线程进入阻塞状态。当所有其他线程释放该锁,并且线程调度器允许本线程持有它时,该线程将变成非阻塞状态。
b、当此线程等待另一个线程通知调度器某个条件时,它自己进入等待状态。Object.wait,或者Thread.join,或者等待java.util.concurrent库中的Lock或者Condition时就会出现这种情况。
c、有些方法带有一个超时参数,调用这些方法将会导致线程进入计时等待状态。这一状态将持续到超时期满或者接到适当的通知。这些带有超时参数的方法有:Thread.sleep、Object.wait、Thread.join、Lock.tryLock、Condition.await的计时版。
5、java线程状态转换图
6、jion方法:java.lang.Thread的实例方法,void join(),void join(long millis),等待指定线程终止后进入runnable状态,后一个是等待指定的线程终止或者等待指定的毫秒后进入runnable状态。
7、获取线程状态:Thread.State getState(),返回值是 Thread.State类型的常量枚举:NEW,RUNNABLE,BLOCKED,WAITING,TIME_WAITING或者TERMINATED之一。
2、新生线程:已经new,但是尚未被start的线程。
3、可运行线程:调用start方法后,线程进入runnable状态。进入了可运行状态的线程可能正在运行也有肯能没有运行(这就是这个状态叫做"可运行"而不是"运行"的原因),这取决于操作系统给线程提供的运行时间。运行中的线程也属于可运行状态。
4、阻塞或等待线程:当线程处于阻塞或者等待状态时,它暂时不活动,不执行任何代码,消耗最少资源,直到线程调度器重新激活它。进入阻塞或者等待状态的情况:
a、当一个线程试图获取一个内部的锁对象(而不是java.util.concurrent库中的锁),而该锁被其他线程持有,则该线程进入阻塞状态。当所有其他线程释放该锁,并且线程调度器允许本线程持有它时,该线程将变成非阻塞状态。
b、当此线程等待另一个线程通知调度器某个条件时,它自己进入等待状态。Object.wait,或者Thread.join,或者等待java.util.concurrent库中的Lock或者Condition时就会出现这种情况。
c、有些方法带有一个超时参数,调用这些方法将会导致线程进入计时等待状态。这一状态将持续到超时期满或者接到适当的通知。这些带有超时参数的方法有:Thread.sleep、Object.wait、Thread.join、Lock.tryLock、Condition.await的计时版。
5、java线程状态转换图
6、jion方法:java.lang.Thread的实例方法,void join(),void join(long millis),等待指定线程终止后进入runnable状态,后一个是等待指定的线程终止或者等待指定的毫秒后进入runnable状态。
7、获取线程状态:Thread.State getState(),返回值是 Thread.State类型的常量枚举:NEW,RUNNABLE,BLOCKED,WAITING,TIME_WAITING或者TERMINATED之一。