1.**如下
using2.程式執行結果如下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)); }}
}}
從結果中,可以看出來,程式先啟動了子執行緒的列印數字方法,在執行了6秒之後,呼叫了abort方法,終止了子執行緒。但是這個abort是通過注入threadabortexception方法,從而使用執行緒終止,這種方法非常危險,不建議使用。在子執行緒終止之後,主線程繼續執行。
六、檢測線程狀態(threadstate)
1.**如下
using2.程式執行結果如下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)); }}
}}
如上圖,主線程啟動時定義了兩個子執行緒,乙個會被終止,另乙個會執行至結束。當我們啟動了執行緒之後,t2執行緒的狀態就會變成running,然後會變成waitsleepjoin,直到執行結束,變成stopped。另乙個t執行緒則會列印出數字來,當我們呼叫了abort方法之後,則t執行緒的狀態就變成了abortrequested。這充分說明了同步兩個執行緒的複雜性,請不要程式中使用abort來終止執行緒。
七、執行緒優先順序(priority)
1.**如下
using2.程式執行結果如下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"
)));
} }}
從上圖的結果中,看出來當在多核cpu上執行多執行緒程式時,優先順序所起到的作用區別不大,以上圖的結果來看,最高優先順序與最低優先順序之間的差別在10%左右。如果在單核cpu上執行多執行緒程式時,優先順序的作用的特別明顯,以上圖的結果來看,最高優先順序與最低優先順序之間的差別在100倍以上。
八、前台執行緒與後台執行緒
1.**如下
using2.程式執行結果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
"); }}}
根據上面的**,當程式執行到如上圖時,會一閃而過,退出。這是因為前台執行緒已經執行結束,雖然後台執行緒沒有執行結束,但程式會自動終止後台執行緒。這就是前台執行緒與後台執行緒的區別,程序會等所有的前台執行緒執行完畢,如果此時只剩下後台執行緒沒有執行完畢,則會直接結束工作。
多執行緒程式設計學習筆記 執行緒同步(二)
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 兩者都提供對並行程式設計的支援,都可以利用...