以车站售票为例,多个线程不能同时买一张票,所以把买票这个代码块加锁,等待前面线程买好了,后面线程才能进入买票
class BuyTicket implements Runnable {
private int num = 10 ; //有10张票
@Override
public void run() {
while (num>0){
System.out.println(Thread.currentThread().getName() + "到后面排队 \n");
synchronized(this){ // 锁住买票时不能让别人插队
String name = Thread.currentThread().getName();
if(num<=0){
System.out.println("售票员对" + name +"说没票了,散了吧。");
return;
}
try {
System.out.println( name + "正在买票... \n");
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print( name + "买到了票" + num + ",下一位,");
num--; // 卖掉了一张
}
}
// 买到一张票后继续到后面排队,直到没票
System.out.println("\n\n没票了 \n");
}
}
public class tes