ava線程 同步與異步 線程池

 

線程同步、異步的概念

1)多線程併發時,多個線程同時請求同一個資源,必然導致此資源的數據不安全,A線程修改了B線程的處理的數據,而B線程又修改了A線程處理的數理。顯然這是由於全局資源造成的,有時爲了解決此問題,優先考慮使用局部變量,退而求其次使用同步代碼塊,出於這樣的安全考慮就必須犧牲系統處理性能,加在多線程併發時資源掙奪最激烈的地方,這就實現了線程的同步機制

   同步:A線程要請求某個資源,但是此資源正在被B線程使用中,因爲同步機制存在,A線程請求不到,怎麼辦,A線程只能等待下去

   異步:A線程要請求某個資源,但是此資源正在被B線程使用中,因爲沒有同步機制存在,A線程仍然請求的到,A線程無需等待

 

顯然,同步最最安全,最保險的。而異步不安全,容易導致死鎖,這樣一個線程死掉就會導致整個進程崩潰,但沒有同步機制的存在,性能會有所提升

 

java中實現多線程

1)繼承Thread,重寫裏面的run方法

2)實現runnable接口

 

 Doug Lea比較推薦後者,第一,java沒有單繼承的限制 第二,還可以隔離代碼

 

線程池

要知道在計算機中任何資源的創建,包括線程,都需要消耗系統資源的。在WEB服務中,對於web服務器的響應速度必須要儘可能的快,這就容不得每次在用戶提交請求按鈕後,再創建線程提供服務。 爲了減少用戶的等待時間,線程必須預先創建,放在線程池中,線程池可以用HashTable這種數據結構來實現,看了Apach HTTP服務器的線程池的源代碼,用是就是HashTable,KEY用線程對象,value 用ControlRunnable,ControlRunnable是線程池中唯一能幹活的線程,是它指派線程池中的線程對外提供服務。

出於安全考慮,Apach HTTP服務器的線程池它是同步的。聽說weblogic有異步的實現方式,沒有研究過,不敢確定

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章