Azureus原始碼剖析(四)

2021-09-22 13:42:54 字數 2280 閱讀 6018

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介面,它支...