1. 自定義quartz的併發鎖
using system;
using system.threading;
using log4net;
using quartz;
namespace hk.gramma.business
_isrunning = true;
}try
", thread.currentthread.managedthreadid);
thread.sleep(5000);
_visitcount++;
logger.infoformat("結束任務,執行緒id=,訪問總數=", thread.currentthread.managedthreadid, _visitcount); }
catch (exception ex)
", ex);
}finally}}
}}
2.
使用quartz. disallowconcurrentexecutionattribute 可以簡化併發鎖的處理。
using system;
using system.threading;
using log4net;
using quartz;
namespace hk.gramma.business
", thread.currentthread.managedthreadid);
thread.sleep(5000);
_visitcount++;
logger.infoformat("結束任務,執行緒id=,訪問總數=", thread.currentthread.managedthreadid, _visitcount);
}catch (exception ex)
", ex);}}
}}
測試結果如下
2015-09-08 20:42:30,001 [servicescheduler_worker-2] info secondtimejob [(null)] - 開始任務,執行緒id=4
2015-09-08 20:42:35,001 [servicescheduler_worker-2] info secondtimejob [(null)] - 結束任務,執行緒id=4,訪問總數=1
2015-09-08 20:42:35,001 [servicescheduler_worker-6] info secondtimejob [(null)] - 開始任務,執行緒id=8
2015-09-08 20:42:40,002 [servicescheduler_worker-6] info secondtimejob [(null)] - 結束任務,執行緒id=8,訪問總數=2
2015-09-08 20:42:40,002 [servicescheduler_worker-9] info secondtimejob [(null)] - 開始任務,執行緒id=11
2015-09-08 20:42:45,003 [servicescheduler_worker-9] info secondtimejob [(null)] - 結束任務,執行緒id=11,訪問總數=3
2015-09-08 20:42:45,003 [servicescheduler_worker-4] info secondtimejob [(null)] - 開始任務,執行緒id=6
2015-09-08 20:42:50,004 [servicescheduler_worker-4] info secondtimejob [(null)] - 結束任務,執行緒id=6,訪問總數=4
2015-09-08 20:42:50,004 [servicescheduler_worker-7] info secondtimejob [(null)] - 開始任務,執行緒id=9
2015-09-08 20:42:55,004 [servicescheduler_worker-7] info secondtimejob [(null)] - 結束任務,執行緒id=9,訪問總數=5
2015-09-08 20:42:55,005 [servicescheduler_worker-1] info secondtimejob [(null)] - 開始任務,執行緒id=3
2015-09-08 20:43:00,006 [servicescheduler_worker-1] info secondtimejob [(null)] - 結束任務,執行緒id=3,訪問總數=6
2015-09-08 20:43:00,007 [servicescheduler_worker-5] info secondtimejob [(null)] - 開始任務,執行緒id=7
2015-09-08 20:43:05,007 [servicescheduler_worker-5] info secondtimejob [(null)] - 結束任務,執行緒id=7,訪問總數=7
2015-09-08 20:43:05,007 [servicescheduler_worker-6] info secondtimejob [(null)] - 開始任務,執行緒id=8
2015-09-08 20:43:10,008 [servicescheduler_worker-6] info secondtimejob [(null)] - 結束任務,執行緒id=8,訪問總數=8
2015-09-08 20:43:10,012 [servicescheduler_worker-3] info secondtimejob [(null)] - 開始任務,執行緒id=5
2015-09-08 20:43:15,012 [servicescheduler_worker-3] info secondtimejob [(null)] - 結束任務,執行緒id=5,訪問總數=9
2015-09-08 20:43:15,012 [servicescheduler_worker-4] info secondtimejob [(null)] - 開始任務,執行緒id=6
2015-09-08 20:43:20,013 [servicescheduler_worker-4] info secondtimejob [(null)] - 結束任務,執行緒id=6,訪問總數=10
執行緒鎖與避免執行緒鎖 執行緒鎖檢測
程序是資源共享的,執行緒是資源私有的。死鎖的四個必要條件 在計算機專業的本科教材中,通常都會介紹死鎖的四個必要條件。這四個條件缺一不可,或者說只要破壞了其中任何乙個條件,死鎖就不可能發生。我們來複習一下,這四個條件是 互斥 mutual exclusion 存在這樣一種資源,它在某個時刻只能被分配給...
執行緒的互斥鎖
1.執行緒的互斥鎖 1.1.初始化 在linux下,執行緒的互斥量資料型別是pthread mutex t.在使用前,要對它進行初始化 對於靜態分配的互斥量,可以把它設定為pthread mutex initializer,或者呼叫pthread mutex init.對於動態分配的互斥量,在申請記...
多執行緒的鎖
由於併發的問題,需要加鎖 當多個執行緒同時進行任務時,為了保證不會有多個執行緒同時對同乙個資料進行操作造成不可預料的後果,所以有了鎖的概念,我們通過鎖來使多執行緒任務更加安全。lock threading.lock cond threading.condition lock lock 多執行緒的鎖例...