public class ticketThread implements Runnable{
public static Integer ticket=10;
private String silename;
public static String lockString="lock";
ticketThread(String name){
silename=name;
}
@Override
public void run() {
while(ticket>0){
synchronized (lockString) {
if(ticket>0){
ticket--;
System.out.println(silename+"卖出了第"+ticket+"张票");
}
else{
System.out.println(silename+"卖完了");
}
}
}
}
}
1.写一个类实现runnable接口,重写run方法,run里面写业务逻辑。
public class ticketTset {
public static void main(String[] args) {
Thread thread1=new Thread(new ticketThread("商店一"));
Thread thread2=new Thread(new ticketThread("酒店二"));
Thread thread3=new Thread(new ticketThread("专卖店三"));
Thread thread4=new Thread(new ticketThread("实体店四"));
thread1.start();
thread2.start();
thread3.start();
thread4.start();
}
}
2.写一个类调用。
开始run方法里面没加synchronized锁,
导致线程调用混乱,具体表现为,多个线程调用会有卖出-1,-2票数的情况。
所以加上了。同步锁。
结果为:
商店一卖出了第9张票
商店一卖出了第8张票
专卖店三卖出了第7张票
专卖店三卖出了第6张票
专卖店三卖出了第5张票
专卖店三卖出了第4张票
专卖店三卖出了第3张票
专卖店三卖出了第2张票
专卖店三卖出了第1张票
实体店四卖出了第0张票
酒店二卖完了
专卖店三卖完了
商店一卖完了
因为线程调用顺序是cpu自动分配的,所以每次调用结果都不一样。