啟動(dòng)一個(gè)線程主要用什么方法 c#task可以啟動(dòng)多少個(gè)線程?
c#task可以啟動(dòng)多少個(gè)線程?一個(gè)進(jìn)程可以再開啟的線程受用下內(nèi)存限制,要是是32位的機(jī)器,那你設(shè)置為一個(gè)進(jìn)程有2G的用些內(nèi)存,而每個(gè)線程設(shè)置為講1M的棧空間,所以我那種情況下肯定不行最線程數(shù)在200
c#task可以啟動(dòng)多少個(gè)線程?
一個(gè)進(jìn)程可以再開啟的線程受用下內(nèi)存限制,要是是32位的機(jī)器,那你設(shè)置為一個(gè)進(jìn)程有2G的用些內(nèi)存,而每個(gè)線程設(shè)置為講1M的??臻g,所以我那種情況下肯定不行最線程數(shù)在2000多個(gè)。一個(gè)解決的辦法是創(chuàng)建戰(zhàn)隊(duì)線程時(shí)減少線程棧的大小又或者可以使用64位的系統(tǒng)。64位系統(tǒng)應(yīng)該要也可以遺漏掉這個(gè)問題了??隙ㄊ躢pu及磁盤速度及物理內(nèi)存的限制。你不可以到達(dá)上限值,你的機(jī)器應(yīng)該早就是慢如牛車了。
C#中,怎樣開啟一個(gè)線程,檢測程序運(yùn)行,如果運(yùn)行成功就跳出,沒的成功就繼續(xù)檢測?
不是太很清楚你的需求,你線程假如不必須停止,在每個(gè)線程里都用while(true)之類的死停止循環(huán)就可以了,循環(huán)中假如需要停止一些時(shí)間可以用restless之類的來再繼續(xù)一段時(shí)間。
如何讓A、B兩個(gè)線程依次執(zhí)行?
是對(duì)線程并行通信的問題,Java可以提供了幾個(gè)方案可供選擇。先定義,定義A、B兩個(gè)線程:
方案一:使用Thread類的join方法Thread的join方法是指阻塞主線程,讓當(dāng)前線程負(fù)責(zé)執(zhí)行完再讓CPU時(shí)間片執(zhí)行主線程。這樣上面定義的A、B兩個(gè)線程要讓A負(fù)責(zé)執(zhí)行完之后再負(fù)責(zé)執(zhí)行B,只是需要()即可解決。如下:
()
try{
(3000)//這里如何填寫的超時(shí)時(shí)間可以省略,詳細(xì)意義可一一去查詢。也可可以使用()
}catch(InterruptedExceptione){
()
}
()
方案二:使用Executors來做任務(wù)調(diào)度同時(shí)根據(jù)上列定義的A、B兩個(gè)線程,要在A不能執(zhí)行完之后再負(fù)責(zé)執(zhí)行B,線程不紊亂,建議使用Executors類的靜態(tài)動(dòng)態(tài)方法future一個(gè)單線程的隊(duì)列進(jìn)去,將A、B兩個(gè)任務(wù)放進(jìn)里面兩次先執(zhí)行。具體代碼如下:
ExecutorServiceexeService()
(A)
(B)
()
方案二比方案一要優(yōu)雅。并且依據(jù)join方法的底層實(shí)現(xiàn)程序,建議使用了Thread的wait的framework方法來不能執(zhí)行再等待,所以我原則上也這個(gè)可以使用Thread的wait方法來不能執(zhí)行靜靜的等待故此實(shí)現(xiàn)程序A、B線程的依次執(zhí)行。但Java官方不個(gè)人建議不使用wait、notify方法,就按照官方規(guī)范吧。