多執行緒間 任務取消
//多執行緒併發任務,某個失敗後,希望通知別的執行緒,都停下來,how?
終止執行緒;向當前執行緒拋乙個異常然後終結任務;執行緒屬於os資源,可能不會立即停下來
//task不能外部終止任務,只能自己終止自己(上帝才能打敗自己)
//cts有個bool屬性iscancellationrequested 初始化是false
//呼叫cancel方法後變成true(不能再變回去),可以重複cancel
try"
; tasklist.add(task.run(() => 開始 threadid=");
thread.sleep(
new random().next(50, 100
));
if (name.equals("
btnthreadcore_click_11"))
else
if (name.equals("
btnthreadcore_click_12"))
else
if (name.equals("
btnthreadcore_click_13"))
if (!cts.iscancellationrequested)
成功結束 threadid=");
}else
中途停止 threadid=");
return
; }
}catch
(exception ex)
}, cts.token)); //傳入token會在cancel以後 全部取消任務
}//1 準備cts 2 try-catch-cancel 3 action要隨時判斷iscancellationrequested
//盡快停止,肯定有延遲,在判斷環節才會結束
task.waitall(tasklist.toarray());
//如果執行緒還沒啟動,能不能就別啟動了?
//1 啟動執行緒傳遞token 2 異常抓取
//在cancel時還沒有啟動的任務,就不啟動了;也是拋異常,cts.token.throwifcancellationrequested
} catch
(aggregateexception aex) }
catch
(exception ex)
多執行緒 記憶體鎖
//1 lock解決多執行緒衝突
//lock是語法糖,monitor.enter,佔據乙個引用,別的執行緒就只能等著
//推薦鎖是private static readonly object,
//a不能是null,可以編譯不能執行;
//b 不推薦lock(this),外面如果也要用例項,就衝突了
test test = new
test();
task.delay(
1000).continuewith(t =>
});test.dotest();
//c 不應該是string; string在記憶體分配上是重用的,會衝突
//d lock裡面的**不要太多,這裡是單執行緒的
test test = new
test();
string student = "
水煮魚"
; task.delay(
1000).continuewith(t =>
});test.doteststring();
public
void
doteststring()
次 ");
this
.doteststring();
}else}}
private
int idotestnum = 0
;
private
string name = "
水煮魚";
多執行緒 安全集合
system.collections.concurrent.concurrentqueue
C 多執行緒處理
region 變數初始化 string tx 任務執行緒分派數 每次設定一組 一組十個執行緒 任務執行緒 限制最多十個執行緒 long threadcount 0 long maxthreadcount 10 manualreseteventslim manual new manualresetev...
多執行緒處理任務
進行任務分解 long begin system.currenttimemillis list futurelist this.getsmoothdatafuture fundidlist,30 阻塞等待所有執行緒全部執行完畢 for futurefuture futurelist log.info...
多執行緒處理任務
業務需求是這樣 接受大量效能資料,要求多執行緒處理效能資料,且在任一時刻同種效能資料只能有一條在處理。這裡有5個類 processscheduler 入口,用於接受效能資料,並將每條效能資料加到佇列中處理 actionexecutor 執行緒池包裝類 actionqueue 任務佇列類,用於儲存同種...