多執行緒常見處理

2022-07-13 12:09:07 字數 2155 閱讀 2523

多執行緒間 任務取消 

//

多執行緒併發任務,某個失敗後,希望通知別的執行緒,都停下來,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 任務佇列類,用於儲存同種...