synchronized关键字

意思就是多线程需要同步执行,不能混淆某些代码导致代码运行出错,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。

案例---购买票的时候

比如3个线程同时买票
2025-09-01T11:43:01.png
售票代码

    package Thread;
    public class buyTicket implements Runnable{
    private int ticket=10;
    public void run(){
    while(ticket>0){
        System.out.println("正在出售第"+ticket+"号票");
        ticket--;
    }
    }
}

导致结果:
原本一张票卖完了就没有了,但是由于多线程问题的原因,代码判断和递减的时候时间有延迟,导致同一张票被出售几次
2025-09-01T11:56:22.png

现在就要使用synchronized来完成代码块的锁定
synchronized(this) 就是以 ticketTask 为锁对象,this即前面创建的实例 buyTicket task=new buyTicket();

    package Thread;
    public class buyTicket implements Runnable{
    private int ticket=10;
    public void run(){
    while(ticket>0){

        /**
         * 使用synchronized关键字解决线程安全问题
         */
        synchronized(this){
            if(ticket>0){
                System.out.println("正在出售第"+ticket+"号票");
                ticket--;
            }
        }

    }
    }
}

使用后的效果
2025-09-01T12:03:03.png