JDK中的几种线程状态
public static enum Thread.State
extends Enum<Thread.State>
- NEW:尚未启动
- RUNNABLE:执行,可分为ready和running,也就是说可以运行但是不一定运行,由操作系统调度
- BLOCKED:被阻塞等待监视器锁定
- WAITING:等待另一个线程执行特点动作
- TIMED_WAITING:等待另一个线程执行动作达到指定等待时间
- TERMINATED:已退出
- 线程生命周期转换图:

线程同步机制
多线程编程中,敏感数据不允许多个线程同时访问,使用同步技术可以保证数据在任何时刻,最多只被一个线程访问,保持数据完整性
具体同步方法 - Synchronized
synchronized (对象){//得到对象的锁,才能操作同步代码
//需要被同步的代码
}
- synchronized还可以放在方法声明中,表示整个方法为同步方法
public synchronized void m(String name){
//需要被同步的代码
}
- 同步机制解决售票问题(实现Runnable接口的情况下):
public class Thread02{
public static void main(String[] args){
SellTicket s1 = new SellTicket();
new Thread(s1).start();
new Thread(s1).start();
new Thread(s1).start();
}
}
class SellTicket implements Runnable{
private int num = 500;
private boolean loop = true;//控制while循环结束
public synchronized void m(){//直接在方法上同步,同一时刻,只能有一个线程执行方法
if(num <= 0){
loop = false;
return;//end
}
try{Thread.sleep(50);}
catch(InterruptedException e){
e.printStackTrace();
}
num --;
System.out.println(Thread.currentThread().getName()+"Sell A Ticket");
}
@Override
public void run(){
while(loop){
m();
}
}
}