现实中也存在这样的情况:

模拟一个火车站的售票系统,假如当日从A地发往B地的火车票只有10张,且允许所有窗口卖这10张票,每一个窗口也相当于一个线程。

1、Runnable接口实现

public class Main {

public static void main(String[] args) {

Test m = new Test();

Thread w1 = new Thread(m, "window 1");
Thread w2 = new Thread(m, "window 2");
Thread w3 = new Thread(m, "window 3");

w1.start();
w2.start();
w3.start();

}
}

class Test implements Runnable {
private int n = 10;

public void run() {
while (n > 0) {
System.out.println(n-- + " is saled by " + Thread.currentThread().getName());
}
}
}

2、Thread子类实现

public class Main {

public static void main(String[] args) {

Ticket t = new Ticket();
Test w1 = new Test(t,"window 1");
Test w2 = new Test(t,"window 2");
Test w3 = new Test(t,"window 3");

w1.start();
w2.start();
w3.start();
}
}

class Ticket {
int tic = 10;
}
class Test extends Thread{
private Ticket tick;
public Test(Ticket tick, String name){
super(name);
this.tick = tick;
}
public void run(){
while(tick.tic > 0){
System.out.println(tick.tic -- + " is saled by " + Thread.currentThread().getName());
}
}
}