java 线程的生命周期和锁
线程的生命周期:
Thread.state枚举类共有6种状态:
- NEW:尚未启动的线程状态;
- RUNNABLE:jvm中执行的状态;
- BLOCKED:被阻塞等待监视器锁定的状态;
- WAITING:等待其他线程执行的状态;
- TIME_WAITING:达到执行等待时间的线程状态;
- TERMINATED:已退出线程的状态;
线程生命周期图:
- runnable:可以细分为 ready 和running状态,这个是逻辑上,但是不可查看,Thread,yeild()方法的作用在这里;

线程同步机制【保证数据的安全性】:任何同一时刻,最多只能有一个线程访问;
-
同步代码块
synchronized(对象) { //需要同步的代码块; } -
同步方法
public sychronized void func(){ //需要同步代码; }
互斥锁:
- 每一个对象都对应于宇哥可称之为"互斥锁"的标记,用这个标记来保证任意时刻异能有一个线程访问该对象;
- 关键字:synchronized用来与对象的互斥锁联系,当某个对象用synchronized 来修饰,表明该对下给你在任意时刻只能有一个线程访问;
- 同步方法:
- 非静态的,默认是 this,也可以是其他对象【要求是对所有线程,是相同的一个对象】;
- 静态同步方法:默认为当前类本身【类名.class】;
- 线程死锁:几把锁,分别被线程占用,逻辑错误;
- 释放锁:
- 下面操作会释放锁
- 当前线程的同步方法、同步代码块执行结束;
- 在同步块、方法中,遇到 break,return;
- 在同步块、方法中,出现未处理的Error 或 Exception导致异常结束;
- 在同步块、方法中,执行了线程对象的wait() 方法,当前线程暂停,并释放锁;
- 下面操作不会释放锁:
- 在同步块、方法中,调用Thread.sleep()、 Thread.yield()方法暂停当前程序的执行;
- 在同步块、方法中,其他线程调用了该线程的suspend()方法,将该线程挂起;
- 下面操作会释放锁

浙公网安备 33010602011771号