写一个Java多线程应用程序,模拟三个人排队买票,张三、李四和王五买电影票,售票员只有三张10元的钱,电影票10元钱一张。

 package com.online.test;

/*编写一个Java多线程应用程序,模拟三个人排队买票,张三、李四和王五买电影票,售票员只有三张10元的钱,电影票10元钱一张。
张三拿50元一张的人民币排在李四的前面买票,李四排在王五的前面拿一张20元的人民币买票,王五拿一张10元的人民币买票。*/

public class Maipiao {
    public static void main(String args[]) {
        Thread zhangsan, lisi, wangwu;
        sale Sale = new sale();
        zhangsan = new Thread(Sale);
        zhangsan.setName("z");
        lisi = new Thread(Sale);
        lisi.setName("l");
        wangwu = new Thread(Sale);
        wangwu.setName("w");
        zhangsan.start();
        lisi.start();
        wangwu.start();
    }
}

class sale implements Runnable {

    int number10 = 3, number20 = 0;
    public void run() {
        String name = Thread.currentThread().getName();

        if (name.equals("l")) { // 如果使用该方法的线程传递的参数是10,就不用等待
            number10 = number10 + 1;
            System.out.println("您给我10元。刚好一张票");
        } else if (name.equals("w")) {
            number20 = number20 + 1;
            number10 = number10 - 1;
            System.out.println("您给我20元。找您10元。");
        } else if (name.equals("z")) {
            while (number10 < 4 && number20 == 0) {
                Thread.yield();
            }
            number10 = number10 - 2;
            number20 = number20 - 1;
            System.out.println("您给我50元,找您40元。两张10元。一张20元。");
        }
       

        /*
         * String name = Thread.currentThread().getName(); if (name.equals("z")) {
         * zhangsan.sales_princ(50); } else if (name.equals("l")) {
         * Sale.sales_princ(10); } else if (name.equals("w")) {
         * Sale.sales_princ(20); }
         */
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值