117.线程安全问题-同步方法__

这是一个Java实现的多线程售票系统示例,包含两个售票窗口(线程)。使用了同步方法和同步代码块来防止售票冲突。线程窗口一通过调用`synchronizedMethod`进行同步,而窗口二则使用同步代码块操作共享资源`ticketCount`。当票数为0时,两个窗口都将停止售票。
package com.itheima.threaddemo11;

public class MyRunable implements Runnable{
    private static int ticketCount=100;
    @Override
    public void run() {
        while (true){
            if ("窗口一".equals(Thread.currentThread().getName())){
                //同步方法
                boolean result = false;
                try {
                    result = synchronizedMethod();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if (result){
                    break;
                }
            }
            if ("窗口er".equals(Thread.currentThread().getName())){
                //同步代码块
                synchronized (MyRunable.class){
                    if (ticketCount==0){
                        break;
                    }else {
                        try {
                            Thread.sleep(10);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        ticketCount--;
                        System.out.println(Thread.currentThread().getName()+"在卖票,还剩下"+ticketCount+"张票");

                    }
                }
            }
        }
    }

    private static synchronized boolean synchronizedMethod() throws InterruptedException {
        if (ticketCount==0){
            return true;
        }else {
            Thread.sleep(10);
            ticketCount--;
            System.out.println(Thread.currentThread().getName()+"在卖票,还剩下"+ticketCount+"张票");
            return false;
        }
    }
}
package com.itheima.threaddemo11;


public class Demo {
    public static void main(String[] args) {
        MyRunable mr=new MyRunable();
        Thread t1=new Thread(mr);
        Thread t2=new Thread(mr);
        t1.setName("窗口一");
        t2.setName("窗口二");
        t1.start();
        t2.start();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值