多线程之同步锁买票-复习篇

这篇博客通过一个Java多线程同步的例子——火车票售卖,展示了如何使用同步锁解决线程安全问题。代码中创建了多个售票线程,通过`synchronized`关键字保证了在同一时刻只有一个线程能进行售票操作,避免了数据不一致的情况。
摘要由CSDN通过智能技术生成
package com.lyon.demo.test.mayi;

public class Demo2 {

    public static void main(String[] args) {
        ThreadTrain2 th = new ThreadTrain2();
        Thread thread = new Thread(th);
        Thread thread1 = new Thread(th);
        Thread thread2 = new Thread(th);
        thread.start();
        thread1.start();
        thread2.start();
    }
}


/**
 * 功能描述:(多线程之买火车票案例-使用多线程同步代码解决线程安全问题)
 */
class  ThreadTrain2 implements Runnable{

    private int count = 100;
    // 自定义多线程同步锁
    private Object mutex = new Object();

    @Override
    public void run() {
        //同步锁放在这个位置,只能有一个线程执行
        //synchronized (mutex){
          while (count > 0) {
            try {
                    Thread.sleep(100);
            } catch (InterruptedException e) {
                    e.printStackTrace();
            }
            sale();
        }
    }

    public void sale() {
        synchronized (mutex){
            //同步锁,串行化执行的时候,一定要做对应的逻辑判断
            if(count > 0){
                try {
                    //一旦加锁,sleep睡眠也不会释放锁
                    Thread.sleep(40);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //锁具体资源
                System.out.println("窗口"+Thread.currentThread().getName()+"买了票"+count--);
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值