Thread的join方法使用解析
在C#中,Thread用的是比較多的,至少在windows form中使用是比較頻繁的。一說到線程,可能馬上就會想到界面和線程交互的頭疼事,多線程之前數(shù)據(jù)共享,線程異步等等。這些當然是比較頭疼的,只要有信心 ,慢慢來,相信理解不是難事。
對于Thread中的join方法,主要是用來阻塞當前線程,等待子線程完成后再進行運行。也就是其實所謂的線程合并。比如說主線程派生了子線程,如果想讓子線程完成之前主線程等待,就需要利用join來進行阻塞。
下面來看下具體代碼:
using System;using System.Windows.Forms;
using System.Threading;
namespace WindowsFormsApplication1
{
publicpartialclass Form2 : Form
{
public Form2()
{
InitializeComponent();
}
privatevoid Form2_Load(object sender, EventArgs e)
{
Thread t =new Thread(new ThreadStart(ShowInfo));
for (int j =0; j <20; j++)
{
if (j ==10)
{
t.Start(); //開始線程
t.Join(); //阻塞當前線程 等待t完成后,再繼續(xù)
}
else
{
Console.WriteLine("j="+ j);
}
}
}
privatevoid ShowInfo()
{
for (int i =0; i <10; i++)
{
Console.WriteLine("i="+ i);
}
}
}
}
那么從上面代碼可以猜測出開始輸出的是j從0到9,然后由于線程阻塞,開始輸出i,從0到9,最后輸出j從11到20,運行結(jié)果如下:
但是如果我們不用join方法的時候,會是什么結(jié)果呢?按照猜想,主線程和子線程將會各自運行各的。也就是在輸出j從0到9后,后面的將是亂序輸出,請看結(jié)果:
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
下面再更新一個例子上去,這個比較簡單一些。
當然開始是添加了join的時候:
using System;using System.Windows.Forms;
using System.Threading;
namespace ThreadJonCAPTwo
{
publicpartialclass Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public Thread tMain; //主線程
privatevoid Form1_Load(object sender, EventArgs e)
{
CreateMainThread();
}
///<summary>
/// 創(chuàng)建主線程
///</summary>
privatevoid CreateMainThread()
{
tMain =new Thread(new ThreadStart(MainThreadDoing));
tMain.Start();
}
///<summary>
/// 主線程開啟
///</summary>
privatevoid MainThreadDoing()
{
int totalNum =20;
for (int i =1; i <= totalNum; i++)
{
Console.WriteLine("我是店主,我賣了"+ i +"條魚");
if (i ==12)
{
CreateChildThread();
}
}
}
///<summary>
/// 創(chuàng)建子線程
///</summary>
privatevoid CreateChildThread()
{
Thread tChild =new Thread(new ThreadStart(ChildThreadDoing));
tChild.Start(); //開啟線程
//tChild.Join(); //阻塞主線程
}
///<summary>
/// 子線程開啟
///</summary>
privatevoid ChildThreadDoing()
{
int childNum =20;
for (int i =1; i <= childNum; i++)
{
Console.WriteLine("顧客"+ i +"來買魚啦,呵呵....");
}
}
}
}
得到的結(jié)果如下:
但是如果去掉join方法,就會出現(xiàn)下面的結(jié)果:
可以看出join結(jié)果的作用了吧。目的就是讓主線程阻塞,運行主線程,子線程運行完成,主線程再開始,其實本質(zhì)上說,就是形成一個線程來執(zhí)行。
轉(zhuǎn)載于:https://www.cnblogs.com/scy251147/archive/2011/08/10/2134219.html
總結(jié)
以上是生活随笔為你收集整理的Thread的join方法使用解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linq to object 、linq
- 下一篇: 把Sql数据转换为业务数据的几种方法