**
多窗口叫号
**
public class YourTurn {
public static void main(String[] args) {
Bank b=new Bank();
Thread t1=new Thread(b, "窗口一");
Thread t2=new Thread(b, "窗口二");
Thread t3=new Thread(b, "窗口三");
Thread t4=new Thread(b, "窗口四");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class Bank implements Runnable{
public List<Integer> list=new ArrayList<>();
private volatile int number=1000; //当前人数默认一人
private int total; //总数
public Bank(int n){ //构造方法设置
this.number=n;
this.total=number;
}
public Bank(){this.total=this.number;}
@Override
public void run() {
while(number>0){
synchronized (this){
if (this.number>0){
System.out.println(Thread.currentThread().getName()+": "+(this.total-this.number+1)+"号");
list.add(this.total-this.number+1);
--this.number;
}
}
}
}
}
**
抢票
**
public class AirTickets {
public static void main(String[] args) {
Tickets t=new Tickets();
Thread t1=new Thread(t,"楚龙");
Thread t2=new Thread(t,"志文");
Thread t3=new Thread(t,"友超");
t1.start();
t2.start();
t3.start();
}
}
class Tickets implements Runnable{
private volatile int total=2; //只有两张票
private volatile int number=0;
@Override
public void run() {
synchronized (this){
if(this.number<this.total){
System.out.println(Thread.currentThread().getName()+"抢票成功!,第"+(++this.number)+"票");
}else {
System.out.println(Thread.currentThread().getName()+"抢票失败!");
}
}
}
}