java并发编程学习(3)

多线程模拟银行排队

银行排队叫号的场景如图所示:

这里写图片描述

有一个出票机,按顺序出票。有多个柜台叫号。对于这样的场景,代码实现可以分为2部分,出票机和柜台。

  1. 出票机
public class TicketWindow implements Runnable {

    private int index = 1;

    private final int MAX = 50;

    @Override
    public void run() {
        while (index <= MAX) {
            System.out.println(Thread.currentThread().getName() + " 的号是:" + index++);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

新建TicketWindow类,继承Runnable接口。主要用于生成号码。这里号码从1开始,并且有一个最大值50。当小于最大值时,号码则顺序加一。

  1. 柜台
public class Bank {

    public static void main(String[] args) {
        final TicketWindow ticketWindow = new TicketWindow();
        Thread t1 = new Thread(ticketWindow, "一号柜台");
        Thread t2 = new Thread(ticketWindow, "二号柜台");
        Thread t3 = new Thread(ticketWindow, "三号柜台");

        t1.start();
        t2.start();
        t3.start();
    }
}

模拟三个柜台的情况,每个柜台是一个单独的线程,但是它们必须共享出票数据,所以只定义一个final 的TicketWindow对象。

运行结果如下:

二号柜台 的号是:2
一号柜台 的号是:1
三号柜台 的号是:3
二号柜台 的号是:4
三号柜台 的号是:6
一号柜台 的号是:5
二号柜台 的号是:7
三号柜台 的号是:8
一号柜台 的号是:9
二号柜台 的号是:10
三号柜台 的号是:11
一号柜台 的号是:12
二号柜台 的号是:13
三号柜台 的号是:14
一号柜台 的号是:15
二号柜台 的号是:16
三号柜台 的号是:17
一号柜台 的号是:18
三号柜台 的号是:19
二号柜台 的号是:19
一号柜台 的号是:20
三号柜台 的号是:21
一号柜台 的号是:22
二号柜台 的号是:23
三号柜台 的号是:24
一号柜台 的号是:25
二号柜台 的号是:26
三号柜台 的号是:27
一号柜台 的号是:28
二号柜台 的号是:29
一号柜台 的号是:31
三号柜台 的号是:30
二号柜台 的号是:32
一号柜台 的号是:33
三号柜台 的号是:33
二号柜台 的号是:34
一号柜台 的号是:35
三号柜台 的号是:36
二号柜台 的号是:37
一号柜台 的号是:38
三号柜台 的号是:39
二号柜台 的号是:40
一号柜台 的号是:41
三号柜台 的号是:42
二号柜台 的号是:43
一号柜台 的号是:44
三号柜台 的号是:44
二号柜台 的号是:45
一号柜台 的号是:46
三号柜台 的号是:47
二号柜台 的号是:48
一号柜台 的号是:49
三号柜台 的号是:50

Process finished with exit code 0

可以看到,三个柜台同时叫号的效果了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值