JAVA多线程,怎么总是输出两个同样的?

class MyThread2 implements Runnable{
private int ticket=10;
@Override
public synchronized void run(){
for(int i=0;i<20;i++){
if(this.ticket>0){
System.out.println("卖票:ticket"+ --this.ticket);
}
}
}
}
public class RunnableTicket2 {
public static void main(String[] args) {
MyThread mt=new MyThread();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
}
}

这应该是java中多线程的安全问题吧,CPU处理切换时间片的速率是非常快的,
当线程1判断完之后还没来得及输出,时间片就切换到线程2上了,
然后又进行了一次判断结果还是大于0,但是还没等到线程2输出就又回到了线程1,接着执行
输出语句,比如输出10,输出完之后又一次回到线程2上进行第二次输出,输出的结果和线程1
一样(10)。我觉得应该是临时阻塞问题。 希望能够采纳.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-08-03
class MyThread2这里是MyThread2
MyThread mt这里是MyThread。不是同一个类。
应该是MyThread2 mt = new MyThread2();本回答被提问者采纳
相似回答