Java多線程系列 基礎篇03 Thread中start()和run()的區別

來源:互聯網
上載者:User

標籤:中間   process   變化   failed   exce   exception   應用程式   ignore   status   

1. start() 和 run()的區別
start():啟動一個新線程,新線程會執行相應的run()方法。start()不能被重複調用(會拋出異常)。run()  :run()就和普通的成員方法一樣,可以被重複調用。單獨調用run()的話,會在當前線程中執行run(),而並不會啟動新線程! 
2. start() 源碼(by jdk1.8)
public synchronized void start() {                  //判斷狀態是否為 New ;        if (threadStatus != 0)            throw new IllegalThreadStateException();        // 將線程添加到ThreadGroup中        group.add(this);        boolean started = false;        try {            // 通過start0()啟動線程            start0();            // 設定started標記            started = true;        } finally {            try {                if (!started) {                    group.threadStartFailed(this);                }            } catch (Throwable ignore) {            }        }    }
3. 通過Thread的執行個體對象調用start()方法到底是怎麼啟動線程的?下面對其實現方式做一些簡單的補充。
  1. 基於Kernel Thread(KLT)的映射來實現:KLT是核心線程,核心線程由OS直接完成調度切換,它相對應用程式的線程來講只是一個介面,外部程式會使用一種輕量級進程(Light Weight Process,LWP)來與KLT進行一對一的介面調用。也就是說,進程內部會嘗試利用OS的核心線程去參與實際的調度,而自己使用API調用作為中間橋樑與自己的程式進行互動。
  2. 基於使用者線程(User Thread,UT)的實現:這種方式是考慮是否可以沒有中間這一層映射,自己的線程直接由CPU來調度,或許理論上效率會更高。不過這樣實現時,使用者進程所需要關注的抽象層次會更低一些,跳過OS更加接近CPU,即自己要去做許多OS做的事情,自然的OS的調度演算法、建立、銷毀、環境切換、掛起等都要自己來搞定(因為CPU只做計算)。這樣做顯然很麻煩,許多人曾經嘗試過,後來放棄了。
  3. 混合實現方式:它的設計理念是希望保留Kernel線程原有架構,又想使用使用者線程,輕量級進程依然與Kernel線程一一對應保持不變,唯一變化的就是輕量級進程不再與進程直接掛鈎,而是與使用者線程掛鈎,使用者線程並不一定必須與輕量級進程一一對應,而是多對多,就像在使用一個輕量級進程列表一樣,這樣增加了一層來解除輕量級進程與原進程之間的耦合,可能會使得調度更為靈活。

在以前的JDK版本中,嘗試使用UT的方式來實現,但後來放棄了,採用了與Kernel線程對應的方式,至於一些細節,與具體的平台有很大的關係,JVM會適當考慮具體平台的因素去實現,在JVM規範中也沒規定過必須如何去實現,所以對於程式員來講,只需要知道在new Thread(),調用start()方法後,理論上就有一個可以被OS調度的線程了。

Java多線程系列 基礎篇03 Thread中start()和run()的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.