執行緒執行超時處理 併發執行緒數控制

2022-01-12 09:02:50 字數 3320 閱讀 2802

說明:這裡限制了併發執行儲存過程的最大個數,但並沒有對併發執行緒數進行控制,與文章標題略有不符,但程式稍做改動即可控制併發執行緒數

需求及解決方案:

1、定時執行儲存過程,如何判斷執行時間已到,並且不能重複執行?

不能用等於號判斷時間相等,這樣不太可靠,我採用的辦法是用大於號判斷,並且執行過後在資料庫中記錄一下,防止重複執行

2、如何限制同時執行的儲存過程的個數?

定義了乙個靜態變數,通過靜態變數判斷

**:

using

system;

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

}}

view code

java執行緒超時處理

專案中使用到業務系統呼叫webservice與其他系統的互動。在通過webservice介面進行資料互動時,由於網路或則其他原因往往會是我們的業務系統處於長時間等待。現在我們需求是這個業務只給他固定時間處理,在規定時間內沒處理完則進行超時處理。下面是超時任務的具體實現 public class my...

執行緒併發控制 CountDownLatch閉鎖

latch中文含義有門閂之意,閉鎖的作用相當於一扇門 countdownlatch能夠使乙個執行緒在等待另外一些執行緒完成各自工作之後,再繼續執行。使用乙個計數器進行實現。計數器初始值為執行緒的數量。當每乙個執行緒完成自己任務後,計數器的值就會減一。當計數器的值為0時,表示所有的執行緒都已經完成了任...

C 多執行緒處理等待及執行緒超時問題

最近在寫個多執行緒自動化指令碼操作,但是發現會出現執行緒卡死的現象,因此需要去設定執行緒超時時間,經過一番研究總結了以下幾行 這裡貼出部分來作為記錄和參考 多個執行緒 public static void multiplethreads int th catch exception ex latch...