多執行緒程式設計學習筆記 基礎(二)

2022-02-09 07:43:29 字數 3549 閱讀 4897

1.**如下

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using system.threading; //

引入執行緒

namespace

static

void

printnumber()

",i));}}

//////

暫停2秒的方法

/// static

void

printnumberdely()

==

", datetime.now.second, i));

thread.sleep(timespan.fromseconds(

2)); }}

}}

2.程式執行結果如下

從結果中,可以看出來,程式先啟動了子執行緒的列印數字方法,在執行了6秒之後,呼叫了abort方法,終止了子執行緒。但是這個abort是通過注入threadabortexception方法,從而使用執行緒終止,這種方法非常危險,不建議使用。在子執行緒終止之後,主線程繼續執行。

六、檢測線程狀態(threadstate)

1.**如下

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using system.threading; //

引入執行緒

namespace

thread.sleep(timespan.fromseconds(

4));

//執行緒終止

t.abort();

console.writeline(

"執行緒終止");

console.writeline(

string.format("

t執行緒狀態:

", t.threadstate.tostring()));

console.writeline(

string.format("

t2執行緒狀態:

", t2.threadstate.tostring()));

console.read();

}static

void

donothing()

//////

暫停2秒的方法

/// static

void

printnumberstatus()

==

", datetime.now.second, i));

thread.sleep(timespan.fromseconds(

2)); }}

}}

2.程式執行結果如下

如上圖,主線程啟動時定義了兩個子執行緒,乙個會被終止,另乙個會執行至結束。當我們啟動了執行緒之後,t2執行緒的狀態就會變成running,然後會變成waitsleepjoin,直到執行結束,變成stopped。另乙個t執行緒則會列印出數字來,當我們呼叫了abort方法之後,則t執行緒的狀態就變成了abortrequested。這充分說明了同步兩個執行緒的複雜性,請不要程式中使用abort來終止執行緒。

七、執行緒優先順序(priority)

1.**如下

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using system.threading; //

引入執行緒

using

system.diagnostics;

namespace

static

void

run()

}class

threadrundemo

public

void

countnumber()

console.writeline(

string.format("

執行緒 的優先順序 ,一共計算了 數字

",thread.currentthread.name,thread.currentthread.priority.tostring(), cnt.tostring("n0"

)));

} }}

2.程式執行結果如下

從上圖的結果中,看出來當在多核cpu上執行多執行緒程式時,優先順序所起到的作用區別不大,以上圖的結果來看,最高優先順序與最低優先順序之間的差別在10%左右。如果在單核cpu上執行多執行緒程式時,優先順序的作用的特別明顯,以上圖的結果來看,最高優先順序與最低優先順序之間的差別在100倍以上。

八、前台執行緒與後台執行緒

1.**如下

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using system.threading; //

引入執行緒

using

system.diagnostics;

namespace

}class

threadbackground

public

void

countnumber()

列印 數字

", thread.currentthread.name, i.tostring("n0"

)));

}console.writeline(

" finished counting.",

thread.currentthread.isbackground ?

"background thread

" : "

foreground thread

"); }}}

2.程式執行結果

根據上面的**,當程式執行到如上圖時,會一閃而過,退出。這是因為前台執行緒已經執行結束,雖然後台執行緒沒有執行結束,但程式會自動終止後台執行緒。這就是前台執行緒與後台執行緒的區別,程序會等所有的前台執行緒執行完畢,如果此時只剩下後台執行緒沒有執行完畢,則會直接結束工作。

多執行緒程式設計學習筆記 執行緒同步(二)

1.使用autoresetevent類來實現從乙個執行緒向另乙個執行緒發出通知。2.如下 using system using system.collections.generic using system.linq using system.text using system.threading ...

多執行緒程式設計學習筆記 基礎(三)

1.如下。using system using system.collections.generic using system.linq using system.text using system.threading 引入執行緒 using system.diagnostics namespace...

C 學習 多執行緒程式設計 多執行緒基礎

c 內建了對多執行緒程式設計的支援功能,所以相對於其他語言在多執行緒方面的問題,c 這裡就已經最小化或者不復存在。在.net framework 4.0中,c 中新增了兩個與多執行緒應用程式相關的重要功能 tpl 任務執行並行庫 和plinq 並行linq 兩者都提供對並行程式設計的支援,都可以利用...