Java 多线程之多个窗口售票问题
/* * 同步 * 这里有两种方式加锁 * 分别是 * 1.synchronized * 2.lock()和unlock() */
第一种:
package Runnable接口; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /* * 同步 * 这里有两种方式加锁 * 分别是 * 1.synchronized * 2.lock()和unlock() */ public class MyRunnable implements Runnable { private int tickets = 100; // 定义锁 private Lock lock = new ReentrantLock(); public void run() { while (true) { // 加锁 lock.lock(); if (tickets > 0) { try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "售出了第" + (tickets--) + "张票"); } lock.unlock(); } } }
第二种:
package Runnable接口; /* * 同步 * 这里有两种方式加锁 * 分别是 * 1.synchronized * 2.lock()和unlock() */ public class MyRunnable implements Runnable { private int tickets = 100; public void run() { while (true) { synchronized (this) { if (tickets > 0) { try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "售出了第" + (tickets--) + "张票"); } } } } }
package Runnable接口; public class RunnableDemo { public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); Thread t1 = new Thread(myRunnable, "窗口一"); Thread t2 = new Thread(myRunnable, "窗口二"); Thread t3 = new Thread(myRunnable, "窗口三"); t1.start(); t2.start(); t3.start(); } }
运行结果:
窗口二售出了第100张票
窗口三售出了第99张票
窗口三售出了第98张票
窗口三售出了第97张票
窗口一售出了第96张票
窗口三售出了第95张票
窗口二售出了第94张票
窗口二售出了第93张票
窗口二售出了第92张票
窗口二售出了第91张票
窗口二售出了第90张票
窗口二售出了第89张票
窗口二售出了第88张票
窗口三售出了第87张票
窗口一售出了第86张票
窗口一售出了第85张票
窗口一售出了第84张票
窗口一售出了第83张票
窗口一售出了第82张票
窗口一售出了第81张票
窗口一售出了第80张票
窗口一售出了第79张票
窗口一售出了第78张票
窗口一售出了第77张票
窗口三售出了第76张票
窗口三售出了第75张票
窗口三售出了第74张票
窗口三售出了第73张票
窗口二售出了第72张票
窗口二售出了第71张票
窗口二售出了第70张票
窗口二售出了第69张票
窗口三售出了第68张票
窗口一售出了第67张票
窗口一售出了第66张票
窗口三售出了第65张票
窗口三售出了第64张票
窗口三售出了第63张票
窗口二售出了第62张票
窗口二售出了第61张票
窗口二售出了第60张票
窗口二售出了第59张票
窗口二售出了第58张票
窗口二售出了第57张票
窗口三售出了第56张票
窗口三售出了第55张票
窗口一售出了第54张票
窗口一售出了第53张票
窗口一售出了第52张票
窗口三售出了第51张票
窗口三售出了第50张票
窗口二售出了第49张票
窗口二售出了第48张票
窗口二售出了第47张票
窗口二售出了第46张票
窗口二售出了第45张票
窗口二售出了第44张票
窗口二售出了第43张票
窗口三售出了第42张票
窗口三售出了第41张票
窗口一售出了第40张票
窗口三售出了第39张票
窗口二售出了第38张票
窗口二售出了第37张票
窗口二售出了第36张票
窗口三售出了第35张票
窗口三售出了第34张票
窗口三售出了第33张票
窗口三售出了第32张票
窗口三售出了第31张票
窗口一售出了第30张票
窗口一售出了第29张票
窗口三售出了第28张票
窗口三售出了第27张票
窗口二售出了第26张票
窗口二售出了第25张票
窗口二售出了第24张票
窗口二售出了第23张票
窗口二售出了第22张票
窗口二售出了第21张票
窗口三售出了第20张票
窗口三售出了第19张票
窗口三售出了第18张票
窗口三售出了第17张票
窗口一售出了第16张票
窗口一售出了第15张票
窗口一售出了第14张票
窗口一售出了第13张票
窗口一售出了第12张票
窗口三售出了第11张票
窗口三售出了第10张票
窗口二售出了第9张票
窗口二售出了第8张票
窗口二售出了第7张票
窗口三售出了第6张票
窗口三售出了第5张票
窗口一售出了第4张票
窗口一售出了第3张票
窗口三售出了第2张票
窗口三售出了第1张票