帮忙理一下多线程的一个例子程序。
class MyThread implements Runnable
{
private int ticket = 5 ; // 假设一共有5张票
public void run(){
for(int i=0;i<100;i++)
{
this.sale();
}
}
public void sale()
{
if(this.ticket>0)
{ // 还有票
try
{
Thread.sleep(2000) ; // 加入2秒延迟
}catch(InterruptedException e){
e.printStackTrace() ;
}
System.out.println(Thread.currentThread().getName()+" 卖票:ticket = " + ticket-- );
}
}
};
public class SyncDemo01{
public static void main(String args[]){
MyThread mt = new MyThread() ; // 定义线程对象
Thread t1 = new Thread(mt) ; // 定义Thread对象
Thread t2 = new Thread(mt) ; // 定义Thread对象
Thread t3 = new Thread(mt) ; // 定义Thread对象
t1.start() ;
t2.start() ;
t3.start() ;
}
};
运行结果:
Thread-1 卖票:ticket = 5
Thread-0 卖票:ticket = 3
Thread-2 卖票:ticket = 4
Thread-1 卖票:ticket = 2
Thread-2 卖票:ticket = 1
Thread-0 卖票:ticket = 2
问题:这个结果怎么出来的呢,怎么看着很不可能啊?
为什么每一个线程对象的ticket起始值不是5?