1. 程式人生 > >java多執行緒入門案例(2)之多執行緒簡單應用

java多執行緒入門案例(2)之多執行緒簡單應用

 

上一篇文章java多執行緒案例(1)之簡單銀行取款問題及其優化

我大概介紹了一下Java程式碼優化的問題,主要針對出學者而言,這一次我要介紹多執行緒應用的簡單案例 。網上有許多多執行緒的案例,但大多都挺複雜的,今天我主要目的也是介紹一下多執行緒應用的簡單案例,讓初學者對多執行緒有初步瞭解。

    大概案例:幾個人同時在一個車站購票,車站分幾個視窗,視窗同時售票100,每出售一張票就打印出來,車票售空停止列印。

       對於拿到手的案例,應具體分析一下,幾個人同時在視窗買票,如果沒有多執行緒,會出現什麼樣的情況,如果加上多執行緒又會是一個怎麼樣的結果。現在我們就把這兩種不同情況具體分析。

情況(1)沒有多執行緒

如果沒有多執行緒,不同的人在同一時刻只能在同一個執行緒下購票,可能會出現網路擁堵,每次只能一個人佔用執行緒,只能一個人進行購票。

情況(2)有多執行緒

如果有多執行緒,不同的人購票時都有各自的執行緒,同一時刻購票,互不影響。但這裡面又有Bug,至於這個Bug,下個部落格將進行介紹分析。

 

主函式類:main.java

public class main {

/*主函式入口*/

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        Station station=new Station();
        Window window1=new Window("win1",2000);
        window1.start();
        Window window2=new Window("win2",2000);
        window2.start();
        Window window3=new Window("win3",2000);
        window3.start();
        Window window4=new Window("win4",2000);
        window4.start();
    }

}

車站類:Station.java

public class Station {
    public static int ticket=100;
    
    public static void buy_ticket(String win_name) {
        ticket--;
        System.out.print(win_name+"\n"+"發票數1:"+"剩餘"+ticket+"\n");
    }
}

 

視窗類:Window.java     //繼承多執行緒類Thread

public class Window extends Thread{

    private String win;
    private int deltime;
    public Window(String win, int deltime) {
        // TODO Auto-generated constructor stub
        this.win=win;
        this.deltime=deltime;
    }
    @Override
    public void run() {
        while(Station.ticket>0) {
            Station.buy_ticket(win);
            try {
                sleep(deltime);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

 

具體執行效果:

以上執行效果中的Bug,也就是我在開頭講的Bug,下次部落格將會進行介紹及給出解決。

以上工程具體程式碼可以在github下載:https://github.com/whitedouble/whitedouble.git