0. Java线程的状态转换
2022-06-21 18:19:46 7 举报
java线程的状态转换:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED
作者其他创作
大纲/内容
RUNNABLE(可运行)
t.start()
notify()方法会随机唤醒等待池中的一个线程进入到该锁对象的锁池中。notifyAll()则是唤醒全部线程。
t.wait()t.join()LockSupport.park()
TERMINATED(终止)
等待时间到t.notify()t.notifyAll()LockSupport.unpark()
BLOCKED(阻塞)
Thread.sleep(long)t.wait(long)t.join(long)LockSupport.parkNanos(long)LockSupport.parkUntil(long)
执行完成、抛出异常
Thread$State枚举类:public enum State { span style=\
Thread t = new Thread()
NEW(初始)
系统调度t.yield()
Ready(就绪)
在进行阻塞I/O时,java线程状态还是RUNNABLE。Java线程的状态和操作系统的线程状态不能混为一谈。
线程进入synchronized代码必须先获得锁。未获得锁的线程进入锁池队列。
获得monitor锁
0. Java线程的状态转换
中止状态的线程无法再回到其他状态
系统调度
等待获取monitor锁synchronized
t.notify()t.notifyAll()LockSupport.unpark()
wait()方法只会出现在synchronized代码中,wait()方法会让当前线程释放锁对象,并进入该锁对象的等待池,当前线程进入阻塞状态(WAITING/TIMED_WAITING)。
注意:Java线程状态中并没有Ready和Running状态。Ready和Running是操作系统的线程状态
Running(运行中)
TIMED_WAITING(超时等待)
WAITING(等待)
一个线程只能被start一次
收藏
收藏
0 条评论
下一页