日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Thread的join方法使用解析

發(fā)布時間:2024/6/5 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Thread的join方法使用解析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  在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,運行結果如下:

但是如果我們不用join方法的時候,會是什么結果呢?按照猜想,主線程和子線程將會各自運行各的。也就是在輸出j從0到9后,后面的將是亂序輸出,請看結果:

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

下面再更新一個例子上去,這個比較簡單一些。

當然開始是添加了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 +"來買魚啦,呵呵....");
}
}
}
}

得到的結果如下:

但是如果去掉join方法,就會出現(xiàn)下面的結果:

可以看出join結果的作用了吧。目的就是讓主線程阻塞,運行主線程,子線程運行完成,主線程再開始,其實本質上說,就是形成一個線程來執(zhí)行。

轉載于:https://www.cnblogs.com/scy251147/archive/2011/08/10/2134219.html

總結

以上是生活随笔為你收集整理的Thread的join方法使用解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。