Java并发编程 03 Java 线程状态图
来源:互联网 发布:linux sleep 1s 编辑:程序博客网 时间:2024/06/05 20:17
线程状态转换图如下:
线程状态图
初始态——>就绪态: 当线程对象调用start()方法时就会进入就绪态,若就绪队列没有线程,则直接进入运行态。
就绪态——>运行态: 由系统调用完成。
就绪态<——运行态: 调用Thread.yield()函数,由系统调用完成(当线程时间片用完)
运行态——>阻塞态: 当线程请求锁失败时进入阻塞态。
阻塞态——>就绪态: 阻塞队列中的线程会不断检查锁是否可用,一旦可用就进入就绪队列。
运行态——>等待态
调用Object.wait()方法 wait方法必须在同步块内部;必须由同步块的锁对象调用;必须由notify方法和wait方法必须由同一个锁对象调用调用Thread.join()方法调用LockSupport.park()方法
等待态——>就绪态:某一个线程调用了 锁对象.notify()方法,并且等待的线程并不需要锁
等待态——>阻塞态:锁对象.notify()方法,并且等待的线程需要锁同步。
注意点
wait()方法会释放CPU执行权 和 占有的锁。sleep(long)方法仅释放CPU使用权,锁仍然占用;线程被放入超时等待队列,与yield相比,它会使线程较长时间得不到运行。yield()方法仅释放CPU执行权,锁仍然占用,线程会被放入就绪队列,会在短时间内再次执行。wait和notify必须配套使用,即必须使用同一把锁调用;wait和notify必须放在一个同步块中调用wait和notify的对象必须是他们所处同步块的锁对象。
阅读全文
0 0
- Java并发编程 03 Java 线程状态图
- java线程状态图
- Java线程状态图
- Java线程状态图!
- Java 线程的状态图
- java线程状态图;
- 【Java.Concurrency】Java线程状态图
- Java 多线程之线程状态图
- java学习8-线程状态图
- Java并发编程(2)-线程
- java并发编程:线程池
- Java并发编程:线程创建
- Java并发编程:线程池
- Java并发编程 线程池
- java并发编程---线程池
- java并发编程:线程让步
- Java并发编程:线程池
- java并发编程:线程安全性
- Spring Cache抽象-基于XML的配置声明(基于ConcurrentMap的配置)
- 小C语言--词法分析程序
- CodeForces 865D Buy Low Sell High(思维)
- POJ 2358|URAL 1034|Queens in Peaceful Positions
- 第四周项目4 猴子选大王
- Java并发编程 03 Java 线程状态图
- 最大子数组
- big (Trie)
- poj 3494 Largest Submatrix of All 1’s
- Spring Aop(五)——给Advice传递参数
- Git使用教程
- 51nod 1052 最大M子段和 (区间dp)
- Qt常用类 QFont
- #1 Judging Cars