多线程售票
这是一个多线程安全的代码
package cn.xwdfl;
public class Test1 {
private int num=50;
public Test1() {
}
public Test1(int num) {
this.num = num;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public static void main(String[] args) {
var t=new Test1(10);
var t1=new Thread(t::worker,"th1");
var t2=new Thread(t::worker,"th2");
var t3=new Thread(t::worker,"th3");
var t4=new Thread(t::worker,"th4");
t1.start();
t2.start();
t3.start();
t4.start();
}
void worker(){
String t = Thread.currentThread().getName();
System.out.printf("%s:线程启动..%n", t);
while (true) {
synchronized (this){
if (num<1)break;
System.out.printf("%s:售出一张票(座号%d),剩余%d张票%n",t,num,--num);
try {
TimeUnit.SECONDS.sleep(1);
}catch (Exception e){
e.printStackTrace();
}
}
}
System.out.println("线程结束");
}
}