写一个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); }
         */
    }
}

你可能感兴趣的:(j2se,多线程,java,thread,string,class)