多線程(一)基本概念

       多線程是java應用程序的一個特點,掌握java的多線程也是作爲一java程序員必備的知識。多線程指的是在單個程序中可以同時運行多個同的線程執行不同的任務.線程是程序內的順序控制流,只能使用分配給序的資源和環境。

下面就首先對這兩個名詞區分來作爲本篇博客的開始:

 

    一、線程與進程的區別

       多個進程的內部數據和狀態都是完全獨立的,而多線程是共享一塊內存空間和一組系統資源,有可能互相影響. •                 

        線程本身的數據通常只有寄存器數據,以及一個程序執行時使用的堆棧,所以線程的切換比進程切換的負擔要小。

         多線程編程的目的,就是"最大限度地利用CPU資源",當某一線程的處理不需要佔用CPU而只和I/O等資源打交道時,讓需要佔用CPU資源的其它線程有機會獲得CPU資源。從根本上說,這就是多線程編程的最終目的。

二、瞭解一下java在多線程中的基礎知識

1.Java中如果我們自己沒有產生線程,那麼系統就會給我們產生一個線程(主線程,main方法就在主線程上運行),我們的程序都是由線程來執行的。

 2. 進程:執行中的程序(程序是靜態的概念,進程是動態的概念)。 

3. 線程的實現有兩種方式,第一種方式是繼承Thread類,然後重寫run方法;第二種是實現Runnable接口,然後實現其run方法。 

4. 將我們希望線程執行的代碼放到run方法中,然後通過start方法來啓動線程,start方法首先爲線程的執行準備好系統資源,然後再去調用run方法。當某個類繼承了Thread類之後,該類就叫做一個線程類。 

5. 一個進程至少要包含一個線程。 

6. 對於單核CPU來說,某一時刻只能有一個線程在執行(微觀串行),從宏觀角度來看,多個線程在同時執行(宏觀並行)。 

7. 對於雙核或雙核以上的CPU來說,可以真正做到微觀並行。


三、Thread源碼研究: 

1) Thread類也實現了Runnable接口,因此實現了Runnable接口中的run方法; 

2) 當生成一個線程對象時,如果沒有爲其設定名字,那麼線程對象的名字將使用如下形式:Thread-number,該number將是自動增加的,並被所有的Thread對象所共享(因爲它是static的成員變量)。 

3) 當使用第一種方式來生成線程對象時,我們需要重寫run方法,因爲Thread類的run方法此時什麼事情也不做。

4)當使用第二種方式生成線程對象時,我們需要實現Runnable接口的run方法,然後使用new Thread(new MyThread())(假如MyThread已經實現了Runnable接口)來生成線程對象,這時的線程對象的run方法或調就會MyThread類的run方法,這樣我們自己編寫的run方法就執行了。

說明:


Public void run(){

If(target!=null){

Target.run();

}}


 

當使用繼承Thread生成線程對象時,target爲空,什麼也不執行,當使用第二種方式生成時,執行target.run(),target爲runnable的實例對象,即爲執行重寫後的方法

總結:兩種生成線程對象的區別:

1.兩種方法均需執行線程的start方法爲線程分配必須的系統資源、調度線程運行並執行線程的run方法。 

2.在具體應用中,採用哪種方法來構造線程體要視情況而定。通常,當一個線程已繼承了另一個類時,就應該用第二種方法來構造,即實現Runnable接口。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章