[Java基础多线程]5个人三个窗口办理业务

  • 假设一个银行有3个窗口可以办理业务,其中2号窗口只能办理现金业务,
  • 其他窗口现金业务和理财业务均能办理。(java)
  • 有5个人分别是“张三”,”李四”,”赵四”,”王五”,”田七”来该银行办理业务。
  • 其中赵四和田七是理财业务,其他均为现金业务。
  • 用线程模拟叫号机叫号的过程,并在控制台上打印出哪个人到哪个窗口办理业务
  • (每次办理业务需耗时300ms,假设正好赵四或者田七要办理业务排到了2号窗口,
  • 则不能办理,直接重新安排其他窗口办理,4个窗口不能同时叫号)
 package test;

class Bank {
    public String[] name = { "张三", "李四", "赵四", "王五", "田七" };
    public int index = 0;

    public synchronized void op() {
        if (index >= name.length) {
            return;
        }
        if ((name[index].equals("赵四") || name[index].equals("田七"))
                && Thread.currentThread().getName().equals("2")) {
            System.out.println("不办理");
        } else {
            System.out.println(Thread.currentThread().getName() + ":"
                    + name[index]);
            index++;
        }
    }
}

class Cus implements Runnable {
    private Bank b = new Bank();

    public void run() {
        while (b.index < b.name.length) {
            b.op();
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

public class thread {
    public static void main(String[] args) {
        Cus c = new Cus();
        Thread t1 = new Thread(c, "1");
        Thread t2 = new Thread(c, "2");
        Thread t3 = new Thread(c, "3");
        t1.start();
        t2.start();
        t3.start();
    }
}

这样符合么

http://www.aiuxian.com/article/p-3093048.html