java核心技術-多線程之線程基礎

來源:互聯網
上載者:User

標籤:切換   dea   wait   name   基本   生命週期   獨立   .com   python   

  說起線程,無法免俗首先要弄清楚的三個概念就是:進程、線程、協程。OK,那什麼是進程,什麼是線程,哪協程又是啥東西。進程:進程可以簡單的理解為運行在作業系統中的程式,程式時靜態代碼,進程是動態運行著的代碼,程式的運行需要向作業系統申請資源比如記憶體,檔案控制代碼等,特彆強調的是進程申請的資源都是獨立的,也就是進程與進程之間資源是獨立的。它被作業系統調度,所以進程是相對於作業系統的;線程:線程是進程中程式執行任務的那個,它共用著進程申請的資源;協程:可以簡單的說是線程製造的輕量線程。講完了基本的概念看看三者之前的關係圖:

從關係圖看是不是一目瞭然。對了還要強調的一點是,進程和線程都是之間或者間接受管於作業系統核心的,而協程是受管於程式,在使用者態這邊。既然講到java線程,那java協程咋沒聽說過呢,java語言沒有實現協程,實現協程的語言如python,go等,如果想在java中使用協程咋辦,你可以使用協程架構kilim。

  講完概念,直接進入java線程的世界。在java中線程可以使用Thread類構造一個線程對象,沒錯new Thread()就是一個線程對象了,和new Date()沒什麼區別,就是一個java 對象執行個體而已,是不是很簡單?這裡的簡單是指構造簡單,但是引入之後的問題可就不簡單啦(後面會講)。我們知道對象自身是有生命週期的,普通java對象就是死與活兩種生命週期狀態,而對於線程對象則存在new、ready、running、block或者waitting、dead六種狀態,狀態轉換圖:

線程狀態的轉換是依靠JVM叫用作業系統核心TCB也就是線程式控制制模組來實現線程狀態切換的。

    既然線程在java中也是個對象,那麼這個對象的屬性又有哪些呢?線程的屬性可分為靜態和動態屬性,靜態這裡指的是,程式員不可改變的,是有jvm分配的,動態是指程式員可以自訂的雖然jvm給了預設屬性值。靜態屬性:id等;動態屬性:name,priority,deamon,group,classloader等。講了這麼多基礎的東西,那來實踐下才是王道。

從上面程式可以看出,我們運行程式的時候,相當於在作業系統中啟動一個jvm的應用程式,也就是進程,然後jvm調用main方法,執行這個main方法的線程是主線程(也就是進程中必然有個入口線程-main thread,即至少一個線程),然後main線程啟動了一個子線程。

    好了,java線程基礎入門篇就介紹到這,下一篇繼續線程基礎部分的線程記憶體配置知識。特別說明,本人技術和認識有限,如有錯誤之處,歡迎朋友們指正,萬分感謝。

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.