日期:2014-05-18 浏览次数:20730 次
public class Demo2{
public static void main(String [] args){
SellTicketSystem s1 = new SellTicketSystem();
SellTicketSystem s2 = new SellTicketSystem();
s1.setName("111");
s2.setName("2222222222");
s1.start();
s2.start();
}
}
class SellTicketSystem extends Thread{
private static int ticket=20;
public void run(){
synchronized(this){
while(true){
if(ticket>0){
try{
Thread.sleep(1000);
}catch(Exception e){
e.printStackTrace();
}
System.out.println(this.getName()+"卖到第"+ticket--+"张");
}
}
}
}
}
这样的话222222222就卖不了票了
我告诉你把synchronized(this)改成synchronized(SellTicketSystem.class),是为了告诉你锁怎么用,不是说改这个你的代码就能完成你的想法(2个窗户同时售票),我后面说了,多线程代码结构就不是你这样的。
222222222不卖票的原因是锁的位置不对,一个线程一直占用,一直到票卖光了,另一个线程才能执行锁内的代码。
public class Demo2{
public static void main(String [] args){
Stack stack = new Stack();
SellTicketSystem s1 = new SellTicketSystem(stack,"111");
SellTicketSystem s2 = new SellTicketSystem(stack,"2222222222");
&nbs