public class SellTicket {
public static void main(String[] args) {
SellTicket03 sellTicket03 = new SellTicket03();
new Thread(sellTicket03).start();
new Thread(sellTicket03).start();
new Thread(sellTicket03).start();
// new Thread(new SellTicket03()).start();
// new Thread(new SellTicket03()).start();
// new Thread(new SellTicket03()).start();
}
}
class SellTicket03 implements Runnable{
private static int ticketNum = 100;
private boolean loop = true;
@Override
public void run() {
while (loop){
sell();
}
}
public synchronized void sell(){//同步方法
if (ticketNum <= 0) {
System.out.println("余票不足,售票失败");
loop = false;
return;
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
}
System.out.println("窗口" + Thread.currentThread().getName() + "售票成功,余票:" + --ticketNum);
}
}
直接创建对象
直接创建对象与只用匿名内部类 没有任何不同;
但是你的问题不说匿不匿名的问题,是创建一个对象共享与分别创建3个对象的区别;
你先要搞清楚 ticketNum 静态变量是共享的, loop 私有变量是只属于一个对象的;
第一个线程先一步执行到 共享变量ticketNum == 0;改修改的只是它自己的 loop = false,另外2个仍然是 true