C#多线程JOIN方法初探
[說明:剛接觸多線程時(shí),弄不明白Join()的作用,查閱了三本書,都不明不白。后來經(jīng)過自己的一番試驗(yàn),終于弄清了Join()的本質(zhì)。大家看看我這種寫法是否易懂,是否真的寫出了Join()的本質(zhì),多提寶貴意見。]
Thread類的Join()方法能夠?qū)蓚€(gè)交替執(zhí)行的線程合并為順序執(zhí)行的線程。比如在線程B中調(diào)用了線程A的Join()方法,線程A將插入線程B之前,直到線程A執(zhí)行完畢后,才會(huì)繼續(xù)執(zhí)行線程B。
試一試:線程的插入
//《C#初學(xué)課堂》
//注意添加命名空間
using System.Threading;
static void Main(string[] args)
{
//線程A
Thread ThreadA = new Thread(delegate()
{
for (int i = 0; i <= 100000000; i++)
{
if (i % 1000000 == 0)
{
Console.Write('A');
}
}
});
//線程B
Thread ThreadB = new Thread(delegate()
{
for (int i = 0; i <= 50000000; i++)
{
if (i % 1000000 == 0)
{
Console.Write('B');
}
}
//在這里插入線程A
ThreadA.Join();
for (int i = 0; i <= 50000000; i++)
{
if (i % 1000000 == 0)
{
Console.Write('b');
}
}
});
//啟動(dòng)線程
ThreadA.Start();
ThreadB.Start();
}
運(yùn)行結(jié)果如下,你能分析清楚為什么嗎?
由運(yùn)行結(jié)果可以看出,一開始兩個(gè)線程交替進(jìn)行,當(dāng)線程B執(zhí)行到語句“ThreadA.Join()”時(shí),線程A被插入到線程B之前,兩個(gè)線程合并到一起,變?yōu)轫樞驁?zhí)行,直到執(zhí)行完線程A中的所有語句,才去執(zhí)行線程B中剩余的語句。
換句話說,當(dāng)我們?cè)诰€程B中調(diào)用ThreadA.Join()時(shí),該方法只有在線程ThreadA執(zhí)行完畢之后才會(huì)返回。Join()函數(shù)還可以接受一個(gè)表示毫秒數(shù)的參數(shù),當(dāng)達(dá)到指定時(shí)間后,如果線程A還沒運(yùn)行完畢,那么Join函數(shù)將返回,這時(shí)線程A和線程B再次處于交替運(yùn)行狀態(tài)中。
http://www.cnblogs.com/millen/archive/2009/09/07/1520353.html
?
總結(jié)
以上是生活随笔為你收集整理的C#多线程JOIN方法初探的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生成迷宫/C++
- 下一篇: C#基础:Lambda表达式