java线程存在以下几种状态:

1: 创建状态(New):线程被new出来,还未调用start

2: 就绪状态(Runnable):又称为可执行状态,调用线程的start方法后,线程处于就绪状态,,线程调度程序还未给该线程分配cpu时间片执行。

3: 运行状态(Running):线程调度程序分配cpu时间片来执行线程代码。

4: 阻塞状态(Blocked):线程在运行过程中由于某种原因暂停运行进入阻塞状态,只有满足条件后进入就绪状态,获取cpu后才能再次进入运行状态。

阻塞的情况分三种:

A:等待阻塞(wait):调用wait()方法,与synchroined一起使用,线程进入对象等待池,释放synchroined的锁,处于阻塞状态。当有其他线程notify,notifyAll后线

进入锁标识等待池,即进入同步阻塞状态。

B:同步阻塞:线程运行过程中需要获取锁,但该锁被其他线程持有,则该线程进入锁标识等待池,处于同步阻塞状态。当线程获取锁之后,线程进入就绪状态。

C:其他阻塞:当线程sleep,或者join,或者发出I/O请求后,知道yield时间到,sleep时间到,join的线程执行完,或者I/O返回后,线程进入就绪状态。

5: 死亡状态(Dead):当线程Run方法退出或者运行出现异常线程停止时,线程就会消亡。

synchronized有两种用法,

一种是写在方法前,如果该方法是静态方法,则获取的锁是类锁,多线程调用该类中所有的实例的该方法都是互斥的。如果该方法不是静态的,则获取的锁是对象锁,多线程调用同一个实例的该方法是互斥的,调用不同实例则不是互斥的。

一种是同步代码块:synchronized(){//....},同样根据方法是否是静态方法区分获取对象锁还是类锁。

wait:与synchronized一起使用,即必须想获取指定的锁lock,才能lock.wait。wait时,会释放lock,线程进入对象等待池,释放synchroined的锁,处于阻塞状态。当有其他线程notify,notifyAll后线 进入锁标识等待池,即进入同步阻塞状态。

notify:与synchronized一起使用,即必须想获取指定的锁lock,才能lock.notify,synchronized代码块结束后释放锁,通知一个因lock而进入等待阻塞的线程进入同步阻塞状态。

notifyAll:与synchronized一起使用,即必须想获取指定的锁lock,才能lock.notifyAll,synchronized代码块结束后释放锁,会通知所有因Lock而进入等待阻塞的线程进入同步阻塞状态。

sleep:线程暂停运行,进入阻塞状态,但不会释放之前持有的锁,sleep能够让低优先级的线程有机会运行。

yield:线程进入就绪状态,不会释放锁,让同优先级的其他线程有机会运行。但下次可能继续分配cpu时间片,进入运行状态。

join:让一个线程B加入到一个线程A的尾部,在A运行完前,B不能运行。

最新文章

  1. 转载:《TypeScript 中文入门教程》 14、输入.d.ts文件
  2. jQuery学习笔记(在js中增加、删除及定位控件的操作)
  3. ASP.NET ZERO 学习 HangFire的使用二
  4. 在ORACLE触发器里调用JAVA程序
  5. html5.js让IE(包括IE6)支持HTML5元素方法
  6. 【转】使用json-lib进行Java和JSON之间的转换
  7. Scala初体验
  8. sublime 复制黏贴等快捷键修改
  9. http_build_query函数(学习)
  10. Leetcode 解题 Add Two Numbers Python
  11. Android 传感器开发
  12. oracle即时客户端安装方法
  13. 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10的100次幂。 输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。 输入样例: 1234567890987654321123456789 输出样例: yi san wu
  14. Luogu4363 [九省联考2018]一双木棋chess 【状压DP】【进制转换】
  15. 什么时候Python的List,Tuple最后一个Item后面要加上一个逗号
  16. 可视化svg深入理解viewport、viewbox、preserveaspectradio
  17. vue 路由拦截、axios请求拦截
  18. 第 6 章 存储 - 040 - docker managed volume
  19. OPENWRT路由3G拔号实验
  20. CentOS 7下的KVM网卡配置为千兆网卡

热门文章

  1. Js 获取 本周、本月起始时间
  2. Shortcut Collapse project or projects in the Solution Explorer Microsoft Visual Studio 2008
  3. window scipy install
  4. 工欲善其事必先利其器-Notepad++使用小记(Python)
  5. iOS: 学习笔记, swift扩展
  6. norflash移植及uboot 保存环境变量实验
  7. js共享onload事件
  8. Data Guard配置后续检查
  9. 利用jquery操作Radio方法小结
  10. Tomcat架构(二)