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自动分配的,所以每次调用结果都不一样。