Java 多線程編程 學習筆記

來源:互聯網
上載者:User

並發編程可以將程式分割成互相獨立的task。使用多線程,每個這樣的獨立的task是由一個執行中的線程來驅動的。一個線程是某個進程中的單獨的順序的控制流程。一個thread驅動一個task。可以通過Runnable介面來描述task,為了定義一個task,只要實現Runnale和run()方法。

 

 

在run()中調用static方法Thread.yield(),表示是對thread schedule的一個建議:將CPU時間從一個線程交給到下一個線程。

task的run()並不是有另外一個獨立的thread驅動,而是在main中直接調用(事實上,這也是在使用一個線程,就是永遠為main()分配的一個線程)。

 

 

 

當一個類繼承於Runnable時,它必須實現run(),但是這樣並不表示它就具有了線程執行的能力。為了實現線程執行的能力,需要顯式地把這個task綁定到一個線程上。

 

/////////

 

 

把一個Runnable對象變成一個工作的task的傳統的做法是把它傳遞給Thread的建構函式。

 

 

一個Thread的建構函式只需要一個Runnable對象。調用一個Thread的start()會為這個線程執行必要的初始化工作,然後就調用那個Runnable對象的run()方法,進而在一個新的線程中開始這個task。

 

 

在main()中建立Thread對象,它並沒有獲得Thread的引用。對於一個普通對象,獲得這個對象的引用對於後面的記憶體回收很有協助,但是對於Thread,這就不一樣了。每一個Thread是自我註冊的,所以在某個地方存在對它的引用,只有到Thread的任務退出run()或死亡時,才會執行記憶體回收。

 

/////////

 

在java se5中 java.util.concurrent中引入了Executors來協助管理Thread對象,簡化並發編程。Executors在用戶端和task的執行之間增加了一個間接層,通過這個間接對象來執行task,而不是通過用戶端直接執行task。Executos可以管理非同步任務的執行而不用顯式地管理Thread的生命週期。一個ExecutorService對象知道如何如何構建合適的context來執行Runnable對象。CachedThreadPool為每一個新的task建立一個Thread,通過使用static Executors方法來建立ExecutorService對象,這也就確定了Executor的類型。

 

 

 

通常,一個單一的Executor能夠在系統中建立和管理所有的task。調用shutdown()避免了新的task被提交給這個Executor。在shutdown()被調用之前,現在的這個線程(也就是在驅動main的這個線程)會一直運行所有被提交的task。當這個Executor中的所有task都完成時,這個程式就會馬上退出。

 

 

上面使用的是CachedThreadPool類型的Executor,也可以使用其它類型的Executor,比如FixedThreadPool,它使用有限制數量的Thread來執行提交的task。FixedThreadPool這種類型的Executor在建立的時候代價比較大,但是在執行的時候就節省了每次運行task就建立新的Thread的費用,而CachedThreadPool是在程式執行過程中建立所需的足夠多的Thread,而當他能夠回收舊的Thread,它就停止建立新的Thread。另外一種類型的Executor:SingleThreadExecutor,當需要運行一個長時間的task時,這個類型的Executor非常有用,例如偵聽sock串連,或者在這一個線程中運行很小多個的task。如果多個task被提交給SingleThreadExecutor,那麼它就會將按照線性排列的順序來執行task,另外一個例子就是操作檔案系統時,為了避免非同步控制,就可以很方便的使用它。

 

注意在任何一種Thread pools中,如果可能的話,現有的Thread都會被重用。

 

 

 

 

 

 

 

 

 

 

 

 

聯繫我們

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