執行緒異常處理和取消和執行緒鎖

2022-07-20 07:12:15 字數 3440 閱讀 9228

///

1 多異常處理和執行緒取消

///2 多執行緒的臨時變數

///3 執行緒安全和鎖lock

class

program

"; =>

//

//else if (name.equals("btnthreadcore_click_12"))

//

//else if (name.equals("btnthreadcore_click_38"))

//

"this is 成功 threadid=");

//}));

//}////

多執行緒裡面丟擲的異常,會終結當前執行緒;但是不會影響別的執行緒;

////

那執行緒異常**去了? 被吞了,

////

假如我想獲取異常資訊,還需要通知別的執行緒

//1 可以捕獲到執行緒的異常

//}//catch (aggregateexception aex)

//2 需要try-catch-aggregateexception

// //}

//catch (exception ex)

//可以多catch 先具體再全部

//

////

執行緒異常後經常是需要通知別的執行緒,而不是等到waitall,問題就是要執行緒取消

////

工作中常規建議:多執行緒的委託裡面不允許異常,包一層try-catch,然後記錄下來異常資訊,完成需要的操作

//}#endregion

#region 執行緒取消

//";

=>

// 開始 threadid=");

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));

//}////

1 準備cts 2 try-catch-cancel 3 action要隨時判斷iscancellationrequested

////

盡快停止,肯定有延遲,在判斷環節才會結束

////

如果執行緒還沒啟動,能不能就別啟動了?

////

1 啟動執行緒傳遞token 2 異常抓取

////

在cancel時還沒有啟動的任務,就不啟動了;也是拋異常,cts.token.throwifcancellationrequested

//}//catch (aggregateexception aex)

// //}

//catch (exception ex)

// //}

#endregion

#region 臨時變數 threadid=");

//// });

////}

////臨時變數問題,執行緒是非阻塞的,延遲啟動的;執行緒執行的時候,i已經是5了

////k是閉包裡面的變數,每次迴圈都有乙個獨立的k

////5個k變數 1個i變數

//for (int i = 0; i < 5; i++)

//_ threadid=");

//});

//}}

#endregion

#region 執行緒安全&lock

//});

//c 不應該是string; string在記憶體分配上是重用的,會衝突

//d lock裡面的**不要太多,這裡是單執行緒的

//2 執行緒安全集合

//3 資料分拆,避免多執行緒操作同乙個資料;又安全又高效

//int inumsync = 0;

//int inumasync = 0;

//for (int i = 0; i < 10000; i++)

//

//for (int i = 0; i < 10000; i++)

//);

////

task.run(() =>

////

////

}); //}

//inumsync 和 inumasync分別是多少 10000 1到10000以內

//for (int i = 0; i < 10000; i++)

//

* 1000);

"inumsync= inumasync=");

}

#endregion

#region lock this和lock string

//});

//string在記憶體分配上是重用的,也會衝突

string student = "張三"

; task.delay(

1000).continuewith(t =>

});test.doteststring();

}#endregion

console.readline();

}static

readonly

object form_lock = new

object

(); }

public

class

test

次 ");

this

.dotest();

}else}}

public

void

doteststring()

次 ");

this

.doteststring();

}else}}

private

int idotestnum = 0

;

private

string name = "張三"

; }

執行緒和鎖,鎖公升級

程式 qq.exe feiqiu.exe 這種靜靜的躺在硬碟的軟體 程序 當程式載入到記憶體進行執行的就是程序資源分配的基本單位 執行緒 是程式執行的基本單位 執行緒如何進行排程的?linux是執行緒排程器,os 作業系統 執行緒切換的概念是什麼?context switch cpu儲存現場執行新執...

多執行緒鎖 event和守護執行緒

1 lock threading.lock 只允許乙個執行緒執行 2 semaphore threading.boundedsemaphore 5 最多允許同時執行5個程序 def test 在子執行緒中使用鎖 lock.acquire print lock.release semaphore.ac...

執行緒的異常處理

如下 public class exceptionthread catch runtimeexception e class threadexception implements runnable 執行結果 模擬五個執行緒,每個執行緒均丟擲異常。在主線程中進行異常捕獲。但是根據結果看來異常並未 獲,...