Java學習之多線程一

來源:互聯網
上載者:User

標籤:耦合   綁定   重寫   有一個   執行個體   ann   構造方法   介面實現   利用   

1.進程與線程的關係
一個程式運行後至少有一個進程,一個進程中可以包含多個線程
2.多線程兩種實現方式
A:實現線程程式繼承Thread

/** * 定義子類,繼承Thread * 重寫run() * @author vanguard * */public class SubThread extends Thread {    public void run() {        for(int i = 0; i < 50; i++) {            System.out.println("run..." + i);        }    }}
 1 /** 2  * 多線程 3  * 建立和啟動一個線程 4  *    建立Thread子類對象 5  *    子類對象調用方法start()       6  *    讓線程程式執行,JVM調用線程中的run 7  * @author vanguard 8  * 9  */10 public class ThreadDemo01 {11     public static void main(String[] args) {12         //建立Thread子類對象13         SubThread st = new SubThread();14         //子類對象調用start()15         st.start();16         for(int i = 0; i < 50; i++) {17             System.out.println("main..." + i);18         }19     }20 }

 


B:實現線程的另一種方式實現Runnable介面

/** * 實現Runnable介面 * 重寫run() * @author vanguard * */public class SubRunnable implements Runnable {    public void run() {        for(int i = 0; i < 50; i++) {            System.out.println("run..." + i);        }    }}
/** * 實現介面方式的線程 *     建立Thread對象,在構造方法中傳遞Ruannable介面實作類別對象 *    調用Thread的start() * @author vanguard * */public class ThreadDemo01 {    public static void main(String[] args) {        SubRunnable sr = new SubRunnable();        Thread t = new Thread(sr);        t.start();        for(int i = 0; i < 50; i++) {            System.out.println("main..." + i);        }    }}

 


3.多線程兩種實現方式的區別
  實現Runnable介面的方式,更加的符合物件導向,線程分為兩部分,一部分線程對象,一部分線程任務。
  繼承Thread類,線程對象和線程任務耦合在一起。
  一旦建立Thread類的子類對象,既是線程對象,有又有線程任務。
  實現runnable介面,將線程任務單獨分離出來封裝成對象,類型就是Runnable介面類型。Runnable介面對線程對象和線程任務進行解耦。
  (降低緊密性或者依賴性,建立線程和執行任務不綁定)
4.線程池的原理
  1).在java中,如果每個請求到達就建立一個新線程,開銷是相當大的。
  2).在實際使用中,建立和銷毀線程花費的時間和消耗的系統資源都相當大,甚至可能要比在處理實際的使用者請求的時間和資源要多的多。
  3).除了建立和銷毀線程的開銷之外,活動的線程也需要消耗系統資源。
  如果在一個jvm裡建立太多的線程,可能會使系統由於過度消耗記憶體或“切換過度”而導致系統資源不足。
  為了防止資源不足,需要採取一些辦法來限制任何給定時刻處理的請求數目,儘可能減少建立和銷毀線程的次數,
  特別是一些資源耗費比較大的線程的建立和銷毀,盡量利用已有對象來進行服務。
  線程池主要用來解決線程生命週期開銷問題和資源不足問題。通過對多個任務重複使用線程,
  線程建立的開銷就被分攤到了多個任務上了,而且由於在請求到達時線程已經存在,
  所以消除了線程建立所帶來的延遲。這樣,就可以立即為請求服務,使用應用程式響應更快。
  另外,通過適當的調整線程中的線程數目可以防止出現資源不足的情況。
4.線程的生命週期 

  建立(new Thread)
  當建立Thread類的一個執行個體(對象)時,此線程進入建立狀態(未被啟動)。
  例如:Thread  t1=new Thread();

 

  就緒(runnable)
  線程已經被啟動,正在等待被分配給CPU時間片,也就是說此時線程正在就緒隊列中排隊等候得到CPU資源。例如:t1.start();

 

  運行(running)
  線程獲得CPU資源正在執行任務(run()方法),此時除非此線程自動放棄CPU資源或者有優先順序更高的線程進入,線程將一直運行到結束。

 

  死亡(dead)
  當線程執行完畢或被其它線程殺死,線程就進入死亡狀態,這時線程不可能再進入就緒狀態等待執行。

 

  自然終止:正常運行run()方法後終止

 

  異常終止:調用stop()方法讓一個線程終止運行

 

  堵塞(blocked)
  由於某種原因導致正在啟動並執行線程讓出CPU並暫停自己的執行,即進入堵塞狀態。

 

  正在睡眠:用sleep(long t) 方法可使線程進入睡眠方式。一個睡眠著的線程在指定的時間過去可進入就緒狀態。

 

  正在等待:調用wait()方法。(調用motify()方法回到就緒狀態)

 

  被另一個線程所阻塞:調用suspend()方法。(調用resume()方法恢複)

 

Java學習之多線程一

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.