本帖最后由 王陶成 于 2012-9-21 11:32 编辑
看代码。。。
class Ticket implements Runnable { private static int tickets = 100;
Object obj = new Object();
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();
//当分别启动t1,t2,t3,t4四个对象的线程的时候还是会打印出错票
new Thread(t1).start();
new Thread(t2).start();
new Thread(t3).start();
new Thread(t4).start();
//当启动4个都是t1对象的线程,就不会出现错票问题
// new Thread(t1).start();
// new Thread(t1).start();
// new Thread(t1).start();
// new Thread(t1).start();
}
}
能不能讲一下这个是什么原因了?
|