aethread只是乙個簡單的執行緒類,提供乙個抽象方法runsupport 供我們重寫,相必之下,aethread2有幾個改進的地方:1)加入了執行鎖機制,執行執行緒和等待執行緒的結束這兩個操作需要爭搶執行鎖,若鎖未放開,則說明執行緒還在執行,必須等待鎖的釋放。2)設定了乙個守護執行緒鍊錶,若待建立的執行緒是守護執行緒,當鍊表為空時,新建乙個守護執行緒加入表尾,否則從鍊錶尾部取乙個執行緒節點來使用,類似執行緒池。3)對於守護執行緒,若活躍時間超過時限,就會從守護執行緒鍊錶中刪除頭部節點,即超時最長時間的節點。
public
abstract
class
aethread2
private
static
long
last_timeout_check;
//最近的超時檢查時間
private
static
long
total_starts;
//啟動的執行緒總數
private
static
long
total_creates;
//建立的執行緒總數
private
//執行緒包裝器(實質的執行緒)
private
stringname;
//執行緒名稱
private
boolean
daemon;
//是否守護執行緒
private
intpriority
=thread.norm_priority;
//執行緒優先順序
private
volatile
joinlocklock
=new
joinlock();
public
aethread2(string_name,
boolean
_daemon)
public
void
start()
if(daemon)
else
if(priority
!=//
設定執行緒優先順序
=newlock;
//傳遞鎖
this
,name);
//真正啟動執行緒執行
}public
void
setpriority(
int_priority)
public
void
interrupt()
else
//中斷執行緒}}
public
boolean
iscurrentthread()
public
stringtostring()
else
public
static
void
setourthread()
public
static
void
setourthread(threadthread)
//實質的執行緒,從thread類繼承
protected
static
class
extends
thread
public
void
run()
finally}}
else
}catch
(throwablee)
finally}if
(isinterrupted()||!
thread.currentthread().isdaemon())
else
else}}
if(daemon_threads.size()
>=
max_retained)
daemon_threads.addlast(
this
);//
將此守護節點加入守護執行緒鍊錶尾部,這樣頭部應該是最先超時的節點
setname(
"aethead2:parked["+
daemon_threads.size()+"
]");//
system.out.println("aethread2:queue="+daemon_threads.size()+",creates="+total_creates+",starts="+total_starts);
}sem.reserve();
//新加入節點訊號量增加
if(target
==null)}
}}protected
void
start(aethread2_target,string_name)
else
}protected
void
retire()
}public
void
join()
catch
(interruptedexceptione){}}}
}}
Azureus原始碼剖析(四)
aethread只是乙個簡單的執行緒類,提供乙個抽象方法runsupport 供我們重寫,相必之下,aethread2有幾個改進的地方 1 加入了執行鎖機制,執行執行緒和等待執行緒的結束這兩個操作需要爭搶執行鎖,若鎖未放開,則說明執行緒還在執行,必須等待鎖的釋放。2 設定了乙個守護執行緒鍊錶,若待建...
Azureus原始碼剖析(三)
接著第一篇 的工作,本篇繼續分析種子檔案監聽伺服器的實現細節。先簡單描述下其工作流程,首先伺服器在 6880 埠處開啟乙個套接字監聽,然後開啟乙個守護執行緒用於處理到來的 開啟種子檔案列表 請求,在這個服務執行緒中不斷迴圈讀取來自客戶的請求,對 torrent 檔案列表進行解析。如果此時 azure...
原始碼剖析 Hashtable 原始碼剖析
hashtable同樣是基於雜湊表實現的,同樣每個元素都是key value對,其內部也是通過單鏈表解決衝突問題,容量不足 超過了閾值 時,同樣會自動增長。hashtable也是jdk1.0引入的類,是執行緒安全的,能用於多執行緒環境中。hashtable同樣實現了serializable介面,它支...