///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 執行結果 模擬五個執行緒,每個執行緒均丟擲異常。在主線程中進行異常捕獲。但是根據結果看來異常並未 獲,...