1package Thread; 2/** 3* 4* 三个售票窗口同时出售20张票 5*程序分析:1.票数要使用同一个静态值 6 *2.为保证不会出现卖出同一个票数,要java多线程同步锁。 7*设计思路:1.创建一个站台类Station,继承Thread,重写run方法, 8*在run方法里面执行售票操作!售票要使用同步锁:即有一个站台卖这张票时,其他站台要等这张票卖完! 9*3.创建主方法调用类 10*/ 11public class Station1 extends Thread{ 12//通过构造方法给线程名字赋值 13public Station1(String name){ 14super(name);//给线程名字赋值 15} 16//为了保持票数的一致,票数要静态 17static int tick = 20; 18//创建一个静态钥匙 19static Object ob = "aa";//值是任意的 20//重写run方法 实现买票操作 21public void run(){ 22while(tick>0){ 23synchronized(ob){ 24/** 25* 这个很重要, 必须使用一个锁 26* 进去的人会把钥匙拿在手上 出来才把钥匙拿出来 27*/ 28if(tick>0){ 29System.out.println(getName()+"卖了第"+tick+"张票"); 30tick--; 31}else{ 32System.out.println("票卖完了"); 33} 34} 35try { 36sleep(1000);//休息一秒 37} catch (Exception e) { 38e.printStackTrace(); 39} 40} 41} 42} 43 44 45 46package Thread; 47 48public class MainClass1 { 49/** 50* java 多线程同步锁的使用 51* 示例 三个售票窗口同时出售10张票 52*/ 53public static void main(String[] args) { 54//实例化站台对象 并为每一个站台取名字 55Station1 station1 = new Station1("窗口1"); 56Station1 station2 = new Station1("窗口2"); 57Station1 station3 = new Station1("窗口3"); 58//让每一个站台对象各自开始工作 59station1.start(); 60station2.start(); 61station3.start(); 62} 63}
java 多线程同步锁的使用 三个售票窗口同时出售20张票
Wesley13
2021-10-11
1272 1 0
点赞
收藏
评论区
加载中...