C#,JAVA各版本之Thread.join()详解
????? join方法的功能就是使異步執行的線程變成同步執行。也就是說,當調用線程實例的start方法后,這個方法會立即返回,如果在調用start方法后后需要使用一個由這個線程計算得到的值,就必須使用join方法。如果不使用join方法,就不能保證當執行到start方法后面的某條語句時,這個線程一定會執行完。而使用join方法后,直到這個線程退出,程序才會往下執行。下面的代碼演示了2種語言中多線程.join的用法。
????? JAVA版本:??
package com.cn.net;public class test {/*** @param args* @throws InterruptedException */public static void main(String[] args) throws InterruptedException {// TODO Auto-generated method stub//線程Afinal Thread ThreadA = new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 10; i++){System.out.println("A : " );if (i == 9){break;}try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}});Thread ThreadB = new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 5; i++){System.out.println("B : ");if (i == 4){break;}try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// try { // ThreadA.join();//在這里插入線程A // } catch (InterruptedException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // }for (int i = 0; i < 5; i++){System.out.println("C : " );if (i == 4){break;}try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}});ThreadA.start();ThreadB.start();}}
C#版本:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading;namespace Mutiprocess {class Program{static void Main(string[] args){//線程AThread ThreadA = new Thread(delegate(){for (int i = 0; i < 10; i++){Console.WriteLine("A : ");if (i == 9){break;}Thread.Sleep(1000);}});//線程BThread ThreadB = new Thread(delegate(){for (int i = 0; i < 5; i++){Console.WriteLine("B : ");if (i == 4){break;}Thread.Sleep(1000);}ThreadA.Join();//在這里插入線程Afor (int i = 0; i < 5; i++){Console.WriteLine("C : ");if (i == 4){break;}Thread.Sleep(1000);}});ThreadA.Start();ThreadB.Start();// 前5秒 A B交替出現,然后A出現5次,C出現5次。//如果注釋掉ThreadA.Join(),那么結果是前5秒AB 交替出現 后5秒AC交替出現。//這里我就不再羅嗦了。還是那樣線程B中join了線程A只有A執行結束,才可以繼續執行線程B中剩下的代碼。//join其實就是使異步執行線程轉為同步執行。}} }2中版本的執行(可能)結果是(cpu決定):
A :
B :
A :
B :
A :
B :
B :
A :
B :
A :
A :
A :
A :
A :
A :
C :
C :
C :
C :
C :
當把ThreadA.Join()? 注釋掉后的顯示的規則結果是:
A :
B :
A :
B :
A :
B :
A :
B :
A :
B :
C :
A :
C :
A :
C :
A :
C :
A :
C :
A :
?
更多關于多線程的解釋及例子相見
http://developer.51cto.com/art/200906/132331.htm
http://www.cnblogs.com/qinpengming/archive/2012/05/08/2490665.html
?
?
??
?
?
總結
以上是生活随笔為你收集整理的C#,JAVA各版本之Thread.join()详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 划分VLAN,根据每个VLAN通过DHC
- 下一篇: linux中tr命令的用法