class Ticket implements Runnable { private static int tickets = 100;
Object obj = new Object();//你用的第一个时候,new了四个对象,锁又不是同一个锁,当然会出毛病了,这儿加上static因该就可以了
public void run() {
while(true) {
synchronized(obj) {//这里 加入了同步代码块
if(tickets > 0) {
try {
Thread.sleep(10);
System.out.println(Thread.currentThread().getName() + "买票 : " + tickets--);
}
catch (Exception e) {
System.out.println(e);
}
}
}
}
}
}
public class One11_07 {
public static void main(String[] args) {
Ticket t1 = new Ticket();
Ticket t2 = new Ticket();
Ticket t3 = new Ticket();
Ticket t4 = new Ticket();
//你new了四个对象,用的不是同一个锁,每一个对象都有一个锁,而操作的数据却是通一份数据,所以就出毛病了。把那个锁改成静态的就可以了。
new Thread(t1).start();
new Thread(t2).start();
new Thread(t3).start();
new Thread(t4).start();
////因为这儿是用是同一个锁,当然就没问题了。
// new Thread(t1).start();
// new Thread(t1).start();
// new Thread(t1).start();
// new Thread(t1).start();
}
}//解决楼主的疑问了嘛?
作者: 王陶成 时间: 2012-9-21 11:31
彭润生 发表于 2012-9-21 11:05
class Ticket implements Runnable { private static int tickets = 100;
Object obj = new Object();//你 ...