情景一:四个窗口各售票100张。
代码实现:
class Ticket extends Thread
{
public int ticket=100;
Ticket(String name){
super(name);
}
public void run(){
while(true){
if(ticket>0){
System.out.println(this.getName()+"..."+(ticket--));
}else break;
}
}
}
class TicketDemo2
{
public static void main(String[] args)
{
Ticket t1=new Ticket("一号窗口");
Ticket t2=new Ticket("二号窗口");
Ticket t3=new Ticket("三号窗口");
Ticket t4=new Ticket("四号窗口");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
输出样例:
一号窗口...100
一号窗口...99
一号窗口...98
一号窗口...97
一号窗口...96
一号窗口...95
一号窗口...94
四号窗口...100
二号窗口...100
三号窗口...100
二号窗口...99
四号窗口...99...
情景二:四个窗口共售票100张。
方法一:
class Ticket extends Thread
{
public static int ticket=100;
public void run(){
while(true){
if(ticket>0){
System.out.println(Thread.currentThread().getName()+"..."+(ticket--));
}else break;
}
}
}
class TicketDemo
{
public static void main(String[] args)
{
Ticket t1=new Ticket();
Ticket t2=new Ticket();
Ticket t3=new Ticket();
Ticket t4=new Ticket();
t1.start();
t2.start();
t3.start();
t4.start();
}
}
方法二:
class Ticket implements Runnable
{
public int ticket=100;
public void run(){
while(true){
if(ticket>0){
System.out.println(Thread.currentThread().getName()+"..."+(ticket--));
}else break;
}
}
}
class TicketDemo3
{
public static void main(String[] args)
{
Ticket t=new Ticket();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
Thread t3=new Thread(t);
Thread t4=new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
样例输出:
Thread-0...99
Thread-0...97
Thread-0...96
Thread-2...100
Thread-1...98
Thread-1...93
Thread-3...99
...
//可以看到0窗口和3窗口都售出了票号有99的票。
//产生这样的原因是:
//线程0后运行,线程3先运行。
//当线程0都打印出来后,线程3还没有打印出来。所以出现了两个99.