很久沒有更新blog了,太忙了,都沒時間來整理一下知識點,年底了有點時間了,可以好好整理以前寫的專案**了,順便把常用的業務方法都封裝成通用的方法,以便以後使用到能快速完成。切入主題,封裝了乙個常用的多執行緒使用場景的類庫,提供兩種模式,跟大家分享。
很多時候,我們會遇到這種情況,事件a和事件b毫無關係,是兩個很耗時的相對獨立事件,但是事件c需要用到事件a、b完成之後的結果。如下圖,假設,我們的目的是建造一棟房子,事件a表示去拉磚頭,事件b表示去找工人,事件c表示開始建房,
步驟**片段:
static另一種情況,事件b必須等事件a的結果,才能進行下一步任務的進行,c則等待ab都完成之後開始下一步任務,如圖,假設,事件a表示組裝電腦,事件b表示等a組裝好之後進行打包工作,事件c表示裝車去配送,c在ab過程中可以做一些事件,比如去拿車,去加油等等,總之do something。void main(string
args)
console.writeline(
"c:那開始建房吧!!!");
console.readkey();
}static
void test1(object
s)
console.writeline(s + "
搬完磚了!");
}static
void test2(object
s)
console.writeline(s + "
找夠人了!");
}
步驟**片段:
static咋一看是a組裝一台,b打包一台才是,這裡不是只有一台電腦而已嘛?!我認為兩個事件已經在不同的執行緒上,需要相關業務邏輯去控制的,應該是我們去控制,不應該影響執行緒內部,才是符合ooa的開閉原則,當然,開發中比這複雜的業務還很多,不一定能應景。歡迎**~~void main(string
args)
console.writeline(
"c:全部完畢,開始裝車咯");
console.readkey();
}static
void test1(object
s)
console.writeline(s + "
組裝完成!");
}static
void test2(object
s)
console.writeline(s + "
打包完成!");
}
publicview codesealed
class
threadwrr
else
});return ifinish !=lsthread.count;
}return
false
; }}}
//////
等待所有執行緒
/// public
static
void
waitalltask()
}//////
初始化執行緒
/// ///
執行方式
public
static
void
init(runningtype runtype)
//////
新增執行方法
/// ///
///方法名 ///
方法引數
public
static
void addtask(string title, funcdelegatewithpara method, object
parameter)
//////
新增執行方法
/// ///
///方法名 public
static
void addtask(string
title, funcdelegate method)
//////
開始執行
/// public
static
void
start()
}) .start();}}
}}private
static
void
ordertask()
else
while (!ia.iscompleted)
}isrunning = false
; }
private
static
void
concurrenttask()
;thread.start();
}else
; thread.start(funcobj.parameter);
}lsthread.add(thread);}}
#region begininvoke / invoke
public
static
void
invoke(funcdelegate func)
public
static
void invoke(funcdelegatewithpara func, object
para)
public
static
iasyncresult begininvoke(funcdelegate func)
public
static iasyncresult begininvoke(funcdelegatewithpara func, object
para)
public
static
void
invoke(system.windows.forms.control owner, funcdelegate func)
else
}public
static
void invoke(system.windows.forms.control owner, funcdelegatewithpara func, object
para)
else
} #endregion
private
class
methodparameter
public methodparameter(string title, funcdelegatewithpara func, object
para)}}
public
delegate
void funcdelegatewithpara(object
parameter);
public
delegate
void
funcdelegate();
//////
執行方式
/// public
enum
runningtype
多執行緒隨筆 1
cas v,expected,newvalue v 當前值 expected 期望值 newvalue 新值 當v等於e時,將n賦予v,否則進行自旋操作 在進行cas時,有執行緒更改了v,之後又更改回來,讓程式以為沒發生改變 設立版本號,在cas時加上版本號比較,atmic包中存在版本號的類 loc...
多執行緒隨筆 2
與wait 的區別 wait需要讓已經獲取鎖的執行緒釋放鎖並阻塞,而locksupport不需要 wait指定喚醒某個執行緒更麻煩,而locksupport更便捷 notify notify不釋放鎖 不可呼叫在wait之前,而unpark可以呼叫在park之前 讓當前執行緒阻塞 locksuppor...
多執行緒之使用者級執行緒切換隨筆
執行緒 比程序更輕的動態執行序列,同一程序中的多個執行緒可以共享資源 記憶體 故執行緒間的切換相比程序更加快速 方便。執行緒的切換 是指令之間的切換,從一段執行序列 程式 切換到另一段執行序列 程式 而記憶體對映表不變 即pc的切換,執行緒的切換也是程序切換的重要組成部分 程序的切換包括 指令的切換...