針對相關聯的Job統一進行處理 有時我們需要對相關聯的Job一起處理例如需要同時取消這些Job或者等待所有這些Job結束這時我們可以使用Job Family對於相關聯的Job我們可以將它們設置成同一個Job Family我們需要重載Job的belongsTo方法以設置一個Job的Job Family
Private Object MY_JOB_FAMILY = new Object();
Job job = new Job(
Job Name
){
protected IStatus run(IProgressMonitor monitor) {
// 在這裡添加你的任務代碼
return Status
OK_STATUS;
}
public boolean belongsTo(Object family){
return MY_JOB_FAMILY
equals(family);
}
};
我們可以使用JobManager的一系列方法針對Job Family進行操作
Job
getJobManager()
cancel(MY_JOB_FAMILY); //取消所有屬於MY_JOB_FAMILY的所有Job
Job
getJobManager()
join(MY_JOB_FAMILY); //等待屬於MY_JOB_FAMILY的所有Job結束
Job
getJobManager()
sleep(MY_JOB_FAMILY); //將所有屬於MY_JOB_FAMILY的Job轉入睡眠狀態
Job
getJobManager()
wakeup(MY_JOB_FAMILY); //將所有屬於MY_JOB_FAMILY的Job喚醒
線程死鎖的調試和解決技巧
一旦我們使用了線程我們的程序中就有可能有死鎖的發生一旦發生死鎖我們發生死鎖的線程會沒有響應導致我們程序性能下降如果我們的UI線程發生了死鎖我們的程序會沒有響應必須要重啟程序所以在我們多線程程序開發中發現死鎖的情況解決死鎖問題對提高我們程序的穩定性和性能極為重要
如果我們發現程序運行異常(例如程序沒有響應)我們首先要確定是否發生了死鎖通過下面這些步驟我們可以確定是否死鎖以及死鎖的線程
在Eclipse中以Debug模式運行程序 執行響應的測試用例重現問題 在Eclipse的Debug View中選中主線程(Thread[main])選擇菜單Run>Suspend這時Eclipse會展開主線程的函數調用棧我們就可以看到當前主線程正在執行的操作 通常Eclipse在等待用戶的操作它的函數調用棧會和以下類似
圖片示例
如果主線程發生死鎖函數調用棧的最上層一般會是你自己的函數調用你可以查看一下你當前的函數調用以確定主線程在等待什麼 使用同樣的方法查看其他線程特別是那些等待UI線程的線程 我們需要找出當前線程相互的等待關系以便找出死鎖的原因我們找出死鎖的線程後就可以針對不同情況進行處理
減小鎖的粒度增加並發性 調整資源請求的次序 將需要等待資源的任務放到獨立的線程中執行
[] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27701.html