Thread-0线程正在卖第100张票Thread-1线程正在卖第100张票Thread-1线程正在卖第98张票Thread-1线程正在卖第97张票Thread-1线程正在卖第96张票Thread-1线程正在卖第95张票Thread-1线程...
Thread-0线程正在卖第100张票
Thread-1线程正在卖第100张票
Thread-1线程正在卖第98张票
Thread-1线程正在卖第97张票
Thread-1线程正在卖第96张票
Thread-1线程正在卖第95张票
Thread-1线程正在卖第94张票
Thread-1线程正在卖第93张票
Thread-0线程正在卖第99张票
结果只截取了一部分,下面是程序
class A implements Runnable{
public static int tickets=100;
public void run(){
while(true){
if(tickets>0){
System.out.printf("%s线程正在卖第%d张票\n",Thread.currentThread().getName(),tickets);
tickets--;
}
else break;
}
}
}
public class Tickets {
public static void main(String[] args){
A aa1=new A();
Thread t1=new Thread(aa1);
t1.start();
A aa2=new A();
Thread t2=new Thread(aa2);
t2.start();
}
}
对于执行的结果,不明白为什么出现两次100之后,还会出现99,我是这样理解的:当thread0输出100时,还没--,thread1就开始执行,因此会有两个100,但是tickets声明为static了,这两个100总归要减一,这就会导致必定有一个数字不会出现,但是为什么结果是每一个数字都有,而且还和有几个重复的,为什么???
展开