线程安全问题第二种解决方法------同步方法

package cn.dali3.code04;

/* 解决线程安全问题的第二种方法:
*       使用同步方法
*  步骤:1.把共享数据的代码放到方法中
*       2.用synchronized修饰
*  同步方法的对象锁就是this,也就是接口的实现类对象。*/
public class Demo01 {
    public static void main(String[] args) {
        Runnable run = new RunnableImpl();
        Thread th0 = new Thread(run);//创建第一个窗口
        Thread th1 = new Thread(run);//创建第二个窗口
        Thread th2 = new Thread(run);//创建第三个窗口
        th0.start();
        th1.start();
        th2.start();
    }
}

接口实现类:

package cn.dali3.code04;

public class RunnableImpl implements Runnable {
    private int ticket = 100;

    @Override
    public void run() {
        while(true){f1();}
    }
    public synchronized void f1(){
        if (ticket > 0) {
            try {
                Thread.currentThread().sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"窗口"+"正在卖第"+ticket+"张票");
            ticket--;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值