线程状态:

创建状态:创建一个线程实例 Thread thread = new Thread();

就绪状态:在调用start()方法后,线程获取了除CPU的其他资源,处于就绪状态

执行状态:线程获取CPU使用权,run方法开始执行

阻塞状态:运行中的线程由于其他原因放弃对CPU使用(其他线程抢占)而处于阻塞状态:

1等待阻塞:调用wait()方法,该线程释放所有资源,包括CPU()资源和锁资源,并且释放锁标志,jvm会把该线程放入等待池,不会自动唤醒,要等待其他线程的notify()或notifyAll()唤醒该线程才会重新获得锁标志并且出入就绪态

2同步阻塞:由于线程获取同步锁synchronized失败而处于阻塞状态

3其他阻塞:sleep()方法或join()方法,该类型阻塞会自动唤醒,sleep()超时,join()等待子线程完成后线程会自动唤醒而处于就绪状态,该状态不会释放锁资源,但会释放CPU()资源,会暂时放弃对CPU的占有。

死亡状态:线程执行完run方法或退出run方法就进入了死亡状态

线程的几个方法:

1 start():调用start()处于就绪状态

2 run():执行后处于运行状态

执行完run()和start()后线程死亡

3 sleep(),join()和wait()区别:

sleep,join会释放Cpu资源,但不会释放锁资源,而且会自动唤醒。但是sleep()和join又有不同:

sleep()是自身线程调用,且阻塞超过一定时间后进入就绪态,然后获取Cpu继续执行,而join是其他线程的调用,自身线程阻塞,等待其他线程执行完后进入就绪态,然后获取Cpu让自身线程继续执行。

区别:join内部调用了wait(),是会释放锁的,其他线程可以调用该线程的同步方法,sleep()不具备放锁特点,该线程执行完才会放锁,是static的静态方法;

join()方法遇到interrupt()方法会出现interrupt异常,B.join(),A等待B线程执行,这是遇到了interrupt(),B会暂停但是A会继续执行。

wait()会释放Cpu资源和锁资源,不会自动唤醒。必须要其他线程调用notify()或notifyAll()才会唤醒到达就绪态,获取Cpu后才会继续执行

4:wait(),notify(),notifyAll():

用到的情景:Synchronized语句里使用,用于线程的同步;

wait()方法调用后,线程处于阻塞状态并释放所有资源,将线程处于等待池中,其他线程调用notify()会从等待池唤醒任意一个线程并且放入锁池,调用notifyAll()唤醒所有等待池中的线程并放入锁池,锁池里的线程可以任意争取锁的权力。获得锁的线程将出入就绪状态;

如果使用wait(long time)的方法,达到时间后会自动进入锁池,不需要notify()方法唤醒

5:yield()方法:与sleep()类似,不会释放锁,执行后让线程直接回到就绪状态;可能执行完yield()方法的线程马上又被执行;同优先级和优先级高的线程得到执行机会

三 等待池和锁池的理解:当调用了wait()方法,释放锁资源和Cpu资源,线程进入等待池,当其他线程调用notify()会从等待池任意选择一个线程调入锁池,notifyAll()会调用所有等待池线程进入锁池,锁池里的对象可以竞争锁,优先级高的获得锁的能力更强,获得锁的线程可以进入就绪态继续执行,执行完之后释放锁,然后锁池里的线程再继续竞争。

标签:调用,join,池和锁池,线程,sleep,就绪,等待,wait

来源: https://blog.csdn.net/zhaojunwei666/article/details/96433488

java中的锁池和等待池是什么_线程的几个状态及方法,等待池和锁池的理解相关推荐

  1. java中bigdecimal除以int类型的数据怎么实现_大部分Java程序员都会忽略的几个问题,你中招没?...

    1. 正确使用 equals 方法 Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals. 举个例子: 运行上面的程序会抛出空指针异常,但是我们把第二行的条件 ...

  2. java中线程调度遵循的原则_Java 多线程(三) 线程的生命周期及优先级

    线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: 当用new操作符创建一个新的线程对象时,该线程处 ...

  3. java中的类可以有多个直接父类_一个java类可以有多个父类吗?

    一个java类不可以有多个父类,只可以有1个父类.Java类只支持单继承,不支持多继承,所以只可以有1个父类:接口可以多继承,所以接口可以有多个父类. Java类只可以有1个父类 Java类只支持单继 ...

  4. java中的拆箱和装箱是指什么_一文带你理解Java中自动装箱和拆箱

    Java中自动装箱和拆箱 装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用. 这里的 ...

  5. java中异常处理try块的说法正确的是_下面关于Java中异常处理try块的说法正确的是( )?...

    下面关于Java中异常处理try块的说法正确的是( )? 答:可能抛出异常的方法调用应放在try块中. try块后通常应有一个catch 块,用来处理try块中抛出的异常. 滴定起点pH值提高,滴定突 ...

  6. Java千百问_01基本概念(007)_线程的状态有哪些

    点击进入_更多_Java千百问 1.线程的状态有哪些 在java中java.lang.Thread类有一个变量threadStatus,标示了该线程的当前状态,它是一个int类型,但是对应的get方法 ...

  7. java中月日年这种怎么转换成年月日_最“热乎”的Java社招面试经历分享(共40个面试题)...

    面试时间:2020年10月12日 1.final finally finalize的区别 2.synchronized关键字的作用以及在什么时候使用,concurrent包里面其它的锁. 3.有遇到过 ...

  8. Java中如何引用另一个类里的集合_【18期】Java序列化与反序列化三连问:是什么?为什么要?如何做?...

    Java序列化与反序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: 序列化:对象序列化的最主要的用处就是在传递和保存对象 ...

  9. JAVA中在某游戏系统有猫狗猪_算法面试题之猫狗队列(java)

    [题目]: 已知有宠物:狗.猫如下,实现一种猫狗队列的结构: /** * @ClassName Pet * @Description 宠物 * @Author Huarray * @Date 2019 ...

最新文章

  1. Confluence 6 手动安装语言包和找到更多语言包
  2. python3线程gil_python3爬虫GIL修改多线程实例讲解
  3. excel冻结窗口_excel成绩表怎么固定表头或者某一行?
  4. android 标题栏颜色渐变和阴影,ScrollView上下滑动监听,及判断scrollView是否滚动到底部
  5. c/c++ 前置声明 -- typedef问题
  6. 如何才能成为超级人类,驯服人工智能?
  7. CCF NOI1025 统计奖牌
  8. ISCROLL4 简述
  9. MySQL建表语句综合
  10. 常用的SQL注入语句
  11. 【网络通信 -- 直播】网络通信协议简介 -- RTP 协议的 H264 封包
  12. 用matlab解根3乘根2,信号与系统第五章习题答案
  13. linux删除用户命令userdel
  14. C# 利用 OleDb 组件操作 Excel 进行文件读写操作
  15. win7万能声卡驱动_驱动精灵万能网卡版下载-驱动精灵万能网卡版免费下载
  16. office2007每次打开都配置进度_win7下office2007总是配置进度怎么办-解决office2007显示配置进度的方法 - 河东软件园...
  17. 程矢Oracle PowerDesigner中生成Oracle版本主键和自增列
  18. 2016 上半年 VR 报告:潜在用户4.5亿
  19. 〖Python自动化办公篇④〗- 文件自动化管理 - 文件查找与基于文件内容查找文件
  20. 分享3DMax—制作雪山的教程,赶快搜藏起来吧!

热门文章

  1. Dev-C++5.11游戏创作之躺平发育
  2. 【openjudge】抓住那头牛
  3. 鞋子微商怎么做qq引流?微商如何通过QQ空间引流
  4. 【高级篇 / System】(7.0) ❀ 04. 高可用性 HA 配置 ❀ FortiGate 防火墙
  5. 麒麟安全IPO过会:拟募资6.6亿 第一季营收下降40%
  6. VC浏览器相关的学习(五)(在BHO中建立对话框)--解决CreateDialog的1813错误
  7. 【集合论】偏序关系 ( 偏序关系定义 | 偏序集定义 | 大于等于关系 | 小于等于关系 | 整除关系 | 包含关系 | 加细关系 )
  8. 小米洪锋:跟7000万MIUI用户谈谈
  9. python函数ppt_如何用 Python 让你的PPT数据动起来
  10. super是不是java中的标识符_java关键字super和this是什么?有什么区别?