說明:這裡限制了併發執行儲存過程的最大個數,但並沒有對併發執行緒數進行控制,與文章標題略有不符,但程式稍做改動即可控制併發執行緒數
需求及解決方案:
1、定時執行儲存過程,如何判斷執行時間已到,並且不能重複執行?
不能用等於號判斷時間相等,這樣不太可靠,我採用的辦法是用大於號判斷,並且執行過後在資料庫中記錄一下,防止重複執行
2、如何限制同時執行的儲存過程的個數?
定義了乙個靜態變數,通過靜態變數判斷
**:
usingview codesystem;
using
system.collections.generic;
using
system.componentmodel;
using
system.configuration;
using
system.data;
using
system.data.oracleclient;
using
system.diagnostics;
using
system.io;
using
system.serviceprocess;
using
system.text;
using
system.threading;
using
system.timers;
using
system.xml;
using
dbutil;
using
fqdservice.dal;
using
fqdservice.models;
using
fqdservice.utils;
namespace
fqdservice
#endregion
#region 啟動
protected
override
void onstart(string
args)
#endregion
#region 結束
protected
override
void
onstop()
#endregion
#region 執行儲存過程
//////執行儲存過程
/// public
void runproc(object
sender, elapsedeventargs e)
}else
if (runtimecfg.runtype == 2) //
按月執行}}
#endregion
if(run)
runproccount++;
}#endregion
#region 執行儲存過程超時處理thread threadtimer = new thread(new parameterizedthreadstart(delegate(object
obj2)
執行超時
", runtimecfg.procname));
if (thread != null
)
catch
(exception ex)
終止執行緒出錯:
", runtimecfg.procname, ex.message));}}
}}));
threadtimer.start();
#endregion
#region 為執行儲存過程準備引數oracleparameter oracleparams = new oracleparameter[2
]; oracleparams[
0] = new oracleparameter("
runtype
", oracletype.number);
oracleparams[
1] = new oracleparameter("
cuttime
", oracletype.datetime);
oracleparams[
0].value = 1
; oracleparams[
1].value =datetime.now.date;
#endregion
try"
, runtimecfg.procname));
//執行儲存過程
oraclehelper.runprocedure(runtimecfg.procname, oracleparams);
//模擬執行儲存過程
1900));
filelogger.writelog(
string.format("
儲存過程執行成功
", runtimecfg.procname));
finish = true
;
#endregion
}
catch
(exception ex)
:,", oracleparam.parametername, oracleparam.value.tostring()));
}string strparams = ""
;
if (sbparams.length > 0) strparams = sbparams.tostring(0, sbparams.length - 1
); filelogger.writeerrorlog(
string.format("
儲存過程執行失敗():
", runtimecfg.procname, strparams, ex.message));
#endregion
} }
catch
finally
}));
thread.start();
#endregion
} }
}catch
(exception ex)
}#endregion
}}
java執行緒超時處理
專案中使用到業務系統呼叫webservice與其他系統的互動。在通過webservice介面進行資料互動時,由於網路或則其他原因往往會是我們的業務系統處於長時間等待。現在我們需求是這個業務只給他固定時間處理,在規定時間內沒處理完則進行超時處理。下面是超時任務的具體實現 public class my...
執行緒併發控制 CountDownLatch閉鎖
latch中文含義有門閂之意,閉鎖的作用相當於一扇門 countdownlatch能夠使乙個執行緒在等待另外一些執行緒完成各自工作之後,再繼續執行。使用乙個計數器進行實現。計數器初始值為執行緒的數量。當每乙個執行緒完成自己任務後,計數器的值就會減一。當計數器的值為0時,表示所有的執行緒都已經完成了任...
C 多執行緒處理等待及執行緒超時問題
最近在寫個多執行緒自動化指令碼操作,但是發現會出現執行緒卡死的現象,因此需要去設定執行緒超時時間,經過一番研究總結了以下幾行 這裡貼出部分來作為記錄和參考 多個執行緒 public static void multiplethreads int th catch exception ex latch...