Java多線程生命週期

來源:互聯網
上載者:User

標籤:多線程

這兩天在看線程的東西,根據牛人的部落格總結了一些:每個Java程式至少包含一個線程:主線程。其它線程都是通過Thread構造器或執行個體化繼承類Thread的類來建立的。正在啟動並執行線程通常是由作業系統建立的;Thread對象是由JavaVM建立的,在一個線程對新線程的Thread對象調用start()方法之前,這個新線程並沒有真正開始執行。Thread對象在其線程真正啟動之前就已經存在了,而且其線程退出之後仍然存在。另外需要說明的是:run()方法只是一個類中的普通方法,直接執行和普通的方法沒有兩樣;start()方法則不同,它首先做了建立線程(初始化)等一系列工作,然後該線程由線程調度器控制獲得虛擬cpu後,在jvm上運行run方法,僅僅是將線程送入runnable然後調用run()方法,執行線程體。總結起來就是:start() : 它的作用是啟動一個新線程,新線程會執行相應的run()方法。start()不能被重複調用。run()   : run()就和普通的成員方法一樣,可以被重複調用。單獨調用run()的話,會在當前線程中執行run(),而並不會啟動新線程!

線程的生命週期可分為四個狀態:

建立狀態
使用new操作符建立新的線程類對象時,該線程處於建立狀態。
處於建立狀態的線程只是一個對象,系統還沒有為其分配資源。
可運行狀態
執行線程的start()方法,為線程分配系統資源,安排其運行,並調用其run()方法,這樣就使線程進入可運行狀態了。
可運行狀態並不一定表示運行中。
不可運行狀態
當發生下列事件時,處於運行狀態的線程將進入不可運行狀態:
調用sleep()方法,使線程進入睡眠狀態
調用yield()方法,讓出CPU的佔用權
線程調用wait方法等待特定條件滿足
線程IO阻塞
另一個更高優先順序的線程出現
在支援時間片的系統中,線程的時間片用完
調用了synchronized方法或者synchronized同步代碼塊使得對象被鎖
yield
        public static void yield()
        暫停當前正在執行的線程對象,並執行其他線程。
返回可運行狀態
處於睡眠狀態的線程在指定的睡眠事件之後
如果線程正在等待某一條件,另一對象必須使用notify()或notifyAll()方法通知等待線程
如果線程因為IO阻塞,則等待IO操作完成之後返回可運行狀態
調用了synchronized方法,則等待方法執行完成進行解鎖
消亡狀態

當run方法執行結束後,進入消亡狀態。


原文連結:http://developer.51cto.com/art/200906/130139.htm

                    http://www.itzhai.com/java-based-notebook-the-life-cycle-of-thread-priorities-and-thread-status-of-common-method.html


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.