java 多线程练习,两种方式的买票

    技术2024-05-21  78

    package com.qcby.lock; /** * @author HuangHaiyang * @date 2020/07/02 * @description: description * @version: 1.0.0 */ public class JucTest { public static void main(String[] args) { Ticket ticket=new Ticket(); new Thread(()->{ for (int i = 0; i <40 ; i++) { ticket.sell(); } },"一号").start(); new Thread(()->{ for (int i = 0; i <40 ; i++) { ticket.sell(); } },"二号").start(); new Thread(()->{ for (int i = 0; i <40 ; i++) { ticket.sell(); }},"三号").start(); } static class Ticket{ private int number=30; private synchronized void sell(){ if(number>0){ System.out.println(Thread.currentThread().getName()+"窗口卖出了第"+number+"张票"+"剩余"+--number+"张票"); } } } //一号窗口卖出了第30张票剩余29张票 //一号窗口卖出了第29张票剩余28张票 //一号窗口卖出了第28张票剩余27张票 //二号窗口卖出了第27张票剩余26张票 //二号窗口卖出了第26张票剩余25张票 //二号窗口卖出了第25张票剩余24张票 //二号窗口卖出了第24张票剩余23张票 //二号窗口卖出了第23张票剩余22张票 //二号窗口卖出了第22张票剩余21张票 //二号窗口卖出了第21张票剩余20张票 //二号窗口卖出了第20张票剩余19张票 //二号窗口卖出了第19张票剩余18张票 //二号窗口卖出了第18张票剩余17张票 //二号窗口卖出了第17张票剩余16张票 //二号窗口卖出了第16张票剩余15张票 //二号窗口卖出了第15张票剩余14张票 //二号窗口卖出了第14张票剩余13张票 //二号窗口卖出了第13张票剩余12张票 //二号窗口卖出了第12张票剩余11张票 //二号窗口卖出了第11张票剩余10张票 //二号窗口卖出了第10张票剩余9张票 //二号窗口卖出了第9张票剩余8张票 //二号窗口卖出了第8张票剩余7张票 //二号窗口卖出了第7张票剩余6张票 //二号窗口卖出了第6张票剩余5张票 //二号窗口卖出了第5张票剩余4张票 //二号窗口卖出了第4张票剩余3张票 //二号窗口卖出了第3张票剩余2张票 //二号窗口卖出了第2张票剩余1张票 //二号窗口卖出了第1张票剩余0张票 // //Process finished with exit code 0 }

    lock锁

    package com.qcby.lock; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @author HuangHaiyang * @date 2020/07/02 * @description: description * @version: 1.0.0 */ public class JucTest { public static void main(String[] args) { Ticket ticket=new Ticket(); new Thread(()->{ for (int i = 0; i <40 ; i++) { ticket.sell(); } },"一号").start(); new Thread(()->{ for (int i = 0; i <40 ; i++) { ticket.sell(); } },"二号").start(); new Thread(()->{ for (int i = 0; i <40 ; i++) { ticket.sell(); }},"三号").start(); } static class Ticket{ private int number=30; private Lock lock=new ReentrantLock(); private void sell(){ lock.lock(); try { if(number>0){ System.out.println(Thread.currentThread().getName()+"窗口卖出了第"+number+"张票"+"剩余"+--number+"张票"); } } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } } //一号窗口卖出了第30张票剩余29张票 //一号窗口卖出了第29张票剩余28张票 //一号窗口卖出了第28张票剩余27张票 //一号窗口卖出了第27张票剩余26张票 //三号窗口卖出了第26张票剩余25张票 //三号窗口卖出了第25张票剩余24张票 //三号窗口卖出了第24张票剩余23张票 //二号窗口卖出了第23张票剩余22张票 //二号窗口卖出了第22张票剩余21张票 //二号窗口卖出了第21张票剩余20张票 //二号窗口卖出了第20张票剩余19张票 //二号窗口卖出了第19张票剩余18张票 //二号窗口卖出了第18张票剩余17张票 //二号窗口卖出了第17张票剩余16张票 //二号窗口卖出了第16张票剩余15张票 //二号窗口卖出了第15张票剩余14张票 //二号窗口卖出了第14张票剩余13张票 //二号窗口卖出了第13张票剩余12张票 //二号窗口卖出了第12张票剩余11张票 //二号窗口卖出了第11张票剩余10张票 //二号窗口卖出了第10张票剩余9张票 //二号窗口卖出了第9张票剩余8张票 //二号窗口卖出了第8张票剩余7张票 //二号窗口卖出了第7张票剩余6张票 //二号窗口卖出了第6张票剩余5张票 //二号窗口卖出了第5张票剩余4张票 //二号窗口卖出了第4张票剩余3张票 //二号窗口卖出了第3张票剩余2张票 //二号窗口卖出了第2张票剩余1张票 //二号窗口卖出了第1张票剩余0张票 // //Process finished with exit code 0 }
    Processed: 0.019, SQL: 9