日期:2014-05-20  浏览次数:20730 次

多线程问题,每次都是只有一个线程有机会执行代码,求解释

package tang.testthread;

public class Demo1 implements Runnable{
Ticket window = new Ticket();
@Override
public synchronized void run() {

while(window.getCnt() > 0){
window.sell();
System.out.print(Thread.currentThread().getName() + " : ");
window.show();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {

Demo1 demo1 = new Demo1();
for(int i = 0;i<5;i++)
new Thread(demo1).start();
}
}

class Ticket{
private int cnt = 100;

public void show(){
System.out.println(this.cnt);
}

public int getCnt(){
return this.cnt;
}

public  void sell(){
this.cnt--;
}
}


运行结果:

Thread-0 : 99
Thread-0 : 98
Thread-0 : 97
Thread-0 : 96
Thread-0 : 95
Thread-0 : 94
Thread-0 : 93
Thread-0 : 92
Thread-0 : 91
Thread-0 : 90
Thread-0 : 89
Thread-0 : 88
Thread-0 : 87
Thread-0 : 86
Thread-0 : 85
Thread-0 : 84
Thread-0 : 83
Thread-0 : 82
Thread-0 : 81
Thread-0 : 80
Thread-0 : 79
Thread-0 : 78
Thread-0 : 77
Thread-0 : 76
Thread-0 : 75
Thread-0 : 74
Thread-0 : 73
Thread-0 : 72
Thread-0 : 71
Thread-0 : 70
Thread-0 : 69
Thread-0 : 68
Thread-0 : 67
Thread-0 : 66
Thread-0 : 65
Thread-0 : 64
Thread-0 : 63
Thread-0 : 62
Thread-0 : 61
Thread-0 : 60
Thread-0 : 59
Thread-0 : 58
Thread-0 : 57
Thread-0 : 56
Thread-0 : 55
Thread-0 : 54
Thread-0 : 53
Thread-0 : 52
Thread-0 : 51
Thread-0 : 50
Thread-0 : 49
Thread-0 : 48
Thread-0 : 47
Thread-0 : 46
Thread-0 : 45
Thread-0 : 44
Thread-0 : 43
Thread-0 : 42
Thread-0 : 41
Thread-0 : 40
Thread-0 : 39
Thread-0 : 38
Thread-0 : 37
Thread-0 : 36
Thread-0 : 35
Thread-0 : 34
Thread-0 : 33
Thread-0 : 32
Thread-0 : 31
Thread-0 : 30
Thread-0 : 29
Thread-0 : 28
Thread-0 : 27
Thread-0 : 26
Thread-0 : 25
Thread-0 : 24
Thread-0 : 23
Thread-0 : 22
Thread-0 : 21
Thread-0 : 20
Thread-0 : 19
Thread-0 : 18
Thread-0 : 17
Thread-0 : 16
Thread-0 : 15
Thread-0 : 14
Thread-0 : 13
Thread-0 : 12
Thread-0 : 11
Thread-0 : 10
Thread-0 : 9
Thread-0 : 8
Thread-0 : 7