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 string name;//執行緒名稱
private boolean daemon;//是否守護執行緒
private int priority = thread.norm_priority;//執行緒優先順序
private volatile joinlock lock = new joinlock();
public aethread2(string _name,boolean _daemon )
public void start()
if ( daemon )
else
} }
else
} public void setpriority(int _priority )
} public void setname(string s )
} public string getname()
public void interrupt()
else
} public boolean iscurrentthread()
public string tostring()
else
} public abstract void run();//實質的執行緒函式,在包裝器類中呼叫
public static boolean isourthread(thread thread )
public static void setourthread()
public static void setourthread(thread thread )
//實質的執行緒,從thread類繼承
public void run()
finally
} }
else
} catch( throwable e )
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( interruptedexception e ){} }
} }}
複製**
Azureus原始碼剖析(四)
aethread只是乙個簡單的執行緒類,提供乙個抽象方法runsupport 供我們重寫,相必之下,aethread2有幾個改進的地方 1 加入了執行鎖機制,執行執行緒和等待執行緒的結束這兩個操作需要爭搶執行鎖,若鎖未放開,則說明執行緒還在執行,必須等待鎖的釋放。2 設定了乙個守護執行緒鍊錶,若待建...
Azureus原始碼剖析(三)
接著第一篇 的工作,本篇繼續分析種子檔案監聽伺服器的實現細節。先簡單描述下其工作流程,首先伺服器在 6880 埠處開啟乙個套接字監聽,然後開啟乙個守護執行緒用於處理到來的 開啟種子檔案列表 請求,在這個服務執行緒中不斷迴圈讀取來自客戶的請求,對 torrent 檔案列表進行解析。如果此時 azure...
原始碼剖析 Hashtable 原始碼剖析
hashtable同樣是基於雜湊表實現的,同樣每個元素都是key value對,其內部也是通過單鏈表解決衝突問題,容量不足 超過了閾值 時,同樣會自動增長。hashtable也是jdk1.0引入的類,是執行緒安全的,能用於多執行緒環境中。hashtable同樣實現了serializable介面,它支...