首頁 > 軟體

java多執行緒實現同步鎖賣票實戰專案

2023-01-28 18:01:48

同步概念與方法:

視窗類:

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 同步鎖賣票內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com