java thread programming

       這是我在看一本關於java多線程編程的電子書時,覺得該書的講述和所舉的程序例子比較經典,能夠很快的讓讀者理解其內容。因此我通過自己的話來將其中的部分內容進行總結一下。

       我們知道,計算機中的運行的組織單位是進程,而爲了提高計算機的執行效率,進一步提高計算機併發執行能力和運行效率,引入了輕量級的進程,即線程。 在java語言中,對多線程進行編程是很方便的,因爲java提供的API能夠讓編程人員很方便的通過高級語言來進行多線程編程。java的API中主要是通過繼承Thread類和實現Runnable接口兩種方式來實現多線程編程。

        首先來看一個簡單的java程序,該程序中通過實現Runnable接口,實現了兩個線程的併發。

public class firstThread {


public static void main(String[] args){
new Thread(new Runnable(){
public void run(){
int i =0;
while(i<100){
System.out.println("thread1:"+i++);
}
}
}).start();

int i=100;
while(i>0){
System.out.println("thread2:"+i--);
}
}




       這是在eclipse中運行的結果,兩個線程交替運行的結果展示。其實這個程序的邏輯很清晰和簡單,在main函數中,是一個主函數的線程,然後通過實現runnable接口,又生成了一個新的線程,因此從整體上看,該程序的進程具有兩個同時併發的線程。而我們多次運行該程序,可以發現改程序的執行結果並不是每次都一樣,有時,直到一個線程運行完後,第二個線程纔開始運行。因此這就涉及到了操作系統底層的內容,我們知道操作系統通常實際同一時刻只能運行一個模塊(多核技術除外),因此調度運行資源的的分配,一個線程生成了,並不能馬上就運行,因爲還需要等待操作系統分配運行所需要的資源。因此每次調度的時間點不同,和分配的時間片長度不同,導致了運行結果的不同。

       下面同樣是實現兩個線程併發執行的程序是通過繼承Thread類來實現的,其運行結果和實現Runnable接口是一樣的。

public class firstThread extends Thread{


public void run(){
int i=0;
while(i<100){
System.out.println("i:"+i++);
}
}
public static void main(String[] args) {
firstThread thread = new firstThread();
thread.start();
int i=0;
while(i<100){
System.out.println("j:"+i++);
}
}


}

    下面看一個多線程編程的簡單的應用,一個簡單的銀行叫號系統,模擬銀行窗口叫號服務的模型。首先看程序代碼:

class TicketWindows implements Runnable{
private int max_value =0;
public void run(){
while(true){
if(max_value>100)
break;
System.out.println(Thread.currentThread().getName()+":"+max_value++);

}
}
}
public class bank{  
public static void main(String[] args){
TicketWindows tw2 = new TicketWindows();
Thread t1 = new Thread(tw2);
Thread t2 = new Thread(tw2);
Thread t3 = new Thread(tw2);

t1.start();
t2.start();
t3.start();
}
}

    在以上代碼中ticketWindows類實現了Runnable接口,並實現了其run()方法。在bank類中,首先生成了一個TicketWindows類,接着分別爲該類的一個實例創建了三個線程,然後通過start()方法,啓動三個線程。分析該小程序,一共具有四個線程,主函數一個線程,和所生成的三個窗口線程。下面是該程序在eclipse中運行的結果。


    我所截取的是有線程交替輸出的部分。說到這裏,如果我們多次運行這些程序,會發現折現程序的執行結果不是那麼的令人滿意,比如線程的交替並不是那麼明顯,經常出現,一個線程執行很長時間,然後才交換到另一個線程的執行。這是由於這些只是最基本的實現了多線程的程序,還有很多線程編程方面的限制和技術沒有使用,比如線程間的通信,同步等,以及操作系統方面的知識。

發佈了28 篇原創文章 · 獲贊 35 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章