[2025.1.16 JavaSE学习]线程的生命周期 && 线程同步机制

JDK中的几种线程状态

public static enum Thread.State

extends Enum<Thread.State>

  • NEW:尚未启动
  • RUNNABLE:执行,可分为ready和running,也就是说可以运行但是不一定运行,由操作系统调度
  • BLOCKED:被阻塞等待监视器锁定
  • WAITING:等待另一个线程执行特点动作
  • TIMED_WAITING:等待另一个线程执行动作达到指定等待时间
  • TERMINATED:已退出
  • 线程生命周期转换图:

image



线程同步机制

多线程编程中,敏感数据不允许多个线程同时访问,使用同步技术可以保证数据在任何时刻,最多只被一个线程访问,保持数据完整性

具体同步方法 - 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();
        }
    }
}
posted @ 2025-01-17 01:17  Luna-Evelyn  阅读(21)  评论(0)    收藏  举报