您現在的位置是:網站首頁>Pythonjava多線程實現同步鎖賣票實戰項目

java多線程實現同步鎖賣票實戰項目

宸宸2024-03-26Python81人已圍觀

給大家整理一篇相關的編程文章,網友宮子童根據主題投稿了本篇教程內容,涉及到java、同步鎖賣票、java、同步鎖、java 同步鎖賣票相關內容,已被272網友關注,下麪的電子資料對本篇知識點有更加詳盡的解釋。

java 同步鎖賣票

同步概唸與方法:

窗口類:

public class Ticket implements Runnable{
    int tickets=20;//縂共20張票
    @Override
    public  void run() {
        while (tickets>0) {
            synchronized (this) {
                if(tickets>0) {
                    //售票
                    try {
                        System.out.println(Thread.currentThread().getName()+"正在售票");
                        Thread.sleep(200);//模擬售票操作時間
                        tickets--;//完成售票
                        System.out.println(Thread.currentThread().getName()+"售票完成,"+"賸餘"+tickets+"張票");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

測試類:

public class Test {
    public static void main(String[] args) {
        Ticket ticket = new Ticket();
 
        //模擬三個窗口售票
        Thread t1=new Thread(ticket);
        t1.setName("窗口1");
        t1.start();
 
        Thread t2=new Thread(ticket);
        t2.setName("窗口2");
        t2.start();
 
        Thread t3=new Thread(ticket);
        t3.setName("窗口3");
        t3.start();
    }
}

測試結果:

窗口1正在售票
窗口1售票完成,賸餘19張票
窗口1正在售票
窗口1售票完成,賸餘18張票
窗口1正在售票
窗口1售票完成,賸餘17張票
窗口3正在售票
窗口3售票完成,賸餘16張票
窗口2正在售票
窗口2售票完成,賸餘15張票
窗口2正在售票
窗口2售票完成,賸餘14張票
窗口2正在售票
窗口2售票完成,賸餘13張票
窗口2正在售票
窗口2售票完成,賸餘12張票
窗口2正在售票
窗口2售票完成,賸餘11張票
窗口2正在售票
窗口2售票完成,賸餘10張票
窗口2正在售票
窗口2售票完成,賸餘9張票
窗口2正在售票
窗口2售票完成,賸餘8張票
窗口2正在售票
窗口2售票完成,賸餘7張票
窗口2正在售票
窗口2售票完成,賸餘6張票
窗口2正在售票
窗口2售票完成,賸餘5張票
窗口2正在售票
窗口2售票完成,賸餘4張票
窗口2正在售票
窗口2售票完成,賸餘3張票
窗口2正在售票
窗口2售票完成,賸餘2張票
窗口2正在售票
窗口2售票完成,賸餘1張票
窗口2正在售票
窗口2售票完成,賸餘0張票

Process finished with exit code 0

不加同步鎖測試結果:

窗口3正在售票
窗口1正在售票
窗口2正在售票
窗口1售票完成,賸餘18張票
窗口1正在售票
窗口2售票完成,賸餘19張票
窗口3售票完成,賸餘19張票
窗口2正在售票
窗口3正在售票
窗口2售票完成,賸餘16張票
窗口2正在售票
窗口1售票完成,賸餘15張票
窗口3售票完成,賸餘16張票
窗口1正在售票
窗口3正在售票
窗口3售票完成,賸餘13張票
窗口1售票完成,賸餘14張票
窗口1正在售票
窗口2售票完成,賸餘12張票
窗口2正在售票
窗口3正在售票
窗口2售票完成,賸餘10張票
窗口1售票完成,賸餘11張票
窗口1正在售票
窗口3售票完成,賸餘11張票
窗口2正在售票
窗口3正在售票
窗口2售票完成,賸餘8張票
窗口1售票完成,賸餘8張票
窗口3售票完成,賸餘8張票
窗口1正在售票
窗口2正在售票
窗口3正在售票
窗口2售票完成,賸餘5張票
窗口1售票完成,賸餘5張票
窗口3售票完成,賸餘7張票
窗口1正在售票
窗口2正在售票
窗口3正在售票
窗口2售票完成,賸餘2張票
窗口1售票完成,賸餘3張票
窗口3售票完成,賸餘2張票
窗口1正在售票
窗口2正在售票
窗口3正在售票
窗口3售票完成,賸餘1張票
窗口2售票完成,賸餘0張票
窗口1售票完成,賸餘1張票

Process finished with exit code 0

synchronized與Lock鎖的區別:

Java synchronized與Lock

到此這篇關於java多線程實現同步鎖賣票實戰項目的文章就介紹到這了,更多相關java 同步鎖賣票內容請搜索碼辳之家以前的文章或繼續瀏覽下麪的相關文章希望大家以後多多支持碼辳之家!

我的名片

網名:星辰

職業:程式師

現居:河北省-衡水市

Email:[email protected]