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