漫画:多线程经典例子之一窗口售票

漫画:多线程经典例子之一窗口售票



多线程经典例子:

1.生产与消费

2.多窗口售票

3.龟兔赛跑

4.银行取款

5.读者写者

6.多线程交替打印abc(顺序打印)

具体描述:有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C要求, 同时启动三个线程, 按顺序输出ABC, 循环10次

7.描述:子线程循环10次,接着回到主线程循环100次,如次循环50次。

等等

直接上代码,如下(注意注释)

public class SellTickets {
       public static void main(String[] args) {
           Ticket ticket=new Ticket(10);
           new Thread(ticket,"窗口1").start();
           new Thread(ticket,"窗口2").start();
           new Thread(ticket,"窗口3").start();
       }
   }
   /**
    * 采用实现Runnable接口的方式实现多线程
    */

   class Ticket implements Runnable {
       //总的车票数
       int total;
       Object object = new Object();
       Ticket(int total){
           this.total=total;
       }
       //车票号
       int num = 1;
       @Override
       public void run()
{
           while (true) {
               System.out.println(Thread.currentThread().getName()+" 等待同步锁");
               synchronized (object) {//线程持有同一个object对象
                   // 持有同步锁的窗口执行同步方法块等内容
                   // 而其余窗口等待该持有该同步锁的窗口释放object对象,
                   // 一旦方法块执行完,则开始重新分配锁给哪个窗口持有

                   System.out.println(Thread.currentThread().getName()+" 持有同步锁");                    try {
                       if (num > total) {
                           System.out.println("车票已经卖完啦!");
                           return;
                       }
                       // sleep并不释放同步锁,此处只是休眠100s,等休眠100s后执行后续代码
                       Thread.sleep(100);
                       System.out.println(Thread.currentThread().getName() + " 售出火车票 NO." + (num++));
                   } catch (InterruptedException e) {
                       e.printStackTrace();
                   }
               }
           }
       }
}


输出日志:

窗口1 等待同步锁
窗口3 等待同步锁
窗口2 等待同步锁
窗口1 持有同步锁
窗口1 售出火车票 NO.1
窗口1 等待同步锁
窗口2 持有同步锁
窗口2 售出火车票 NO.2
窗口2 等待同步锁
窗口2 持有同步锁
窗口2 售出火车票 NO.3
窗口2 等待同步锁
窗口3 持有同步锁
窗口3 售出火车票 NO.4
窗口3 等待同步锁
窗口2 持有同步锁
窗口2 售出火车票 NO.5
窗口2 等待同步锁
窗口1 持有同步锁
窗口1 售出火车票 NO.6
窗口1 等待同步锁
窗口2 持有同步锁
窗口2 售出火车票 NO.7
窗口2 等待同步锁
窗口3 持有同步锁
窗口3 售出火车票 NO.8
窗口3 等待同步锁
窗口3 持有同步锁
窗口3 售出火车票 NO.9
窗口3 等待同步锁
窗口2 持有同步锁
窗口2 售出火车票 NO.10
窗口2 等待同步锁
窗口2 持有同步锁
车票已经卖完啦!
窗口1 持有同步锁
车票已经卖完啦!
窗口3 持有同步锁
车票已经卖完啦!


今天的内容就是如此啦,举例的其他经典案例,就不再此篇幅讲了,


大家如果还有其他的经典例子,可以告知哦,谢谢!





本人公众号,会不定期更新!

感谢您的喜欢

请多多关注和支持!

❤️


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值