C#多线程的Join()方法

一、简介

Join方法主要是用来阻塞调用线程,直到某个线程终止或经过了指定时间为止。官方的解释比较乏味,通俗的说就是创建一个子线程,给它加了这个方法,其它线程就会暂停执行,直到这个线程执行完为止才去执行(包括主线程)。

二、代码

class Program
    {
        static void Main(string[] args)
        {
            Thread threadA = new Thread(ThreadMethod);
            threadA.Name = "線程A";
            Thread threadB = new Thread(ThreadMethod);
            threadB.Name = "線程B";
            threadA.Start();       
            //threadA.Join(); 
            threadB.Start();       
            //threadB.Join();

            for (int i = 1; i <=3; i++)
            {
                Console.WriteLine("我是:主線程,我循環{1}次", Thread.CurrentThread.Name, i);
                Thread.Sleep(300);          //休眠300毫秒
            }
            Console.ReadKey();
        }
        public static void ThreadMethod(object parameter)
        {
            for (int i = 1; i <=3; i++)
            {
                Console.WriteLine("我是:{0},我循環{1}次", Thread.CurrentThread.Name, i);
                Thread.Sleep(300);         //休眠300毫秒
            }
        }
    }

三、运行结果

因为线程之间的执行是随机的,所有执行结果和我们想象的一样,杂乱无章!但是说明他们是同时执行的。

现在我们把代码中的 ThreadA.join()和ThreadB.join()方法注释取消,首先程序中有三个线程,ThreadA、ThreadB和主线程,首先主线程先阻塞,然后线程ThreadB阻塞,ThreadA先执行,执行完毕以后ThreadB接着执行,最后才是主线程执行。

到此这篇关于C#多线程Join()方法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 关于C#线程的全面解析

    目录 线程的作用和意义 线程生命周期 C#创建线程 C#让线程休眠一会 C#销毁线程 C#线程优先级 lock:给线程加锁,保证线程同步 Monitor:锁定资源 Mutex:互斥锁 线程的作用和意义 线程 被定义为程序的执行路径.每个线程都定义了一个独特的控制流.如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程执行路径往往是有益的,每个线程执行特定的工作. 线程是轻量级进程.一个使用线程的常见实例是现代操作系统中并行编程的实现.使用线程节省了 CPU 周期的浪费,同时提高了应用程序

  • C#使用Monitor类实现线程同步

    一.简介 Lock关键字是Monitor的一种替换用法,lock在IL代码中会被翻译成Monitor. lock (obj) { //代码段 } //就等同于 Monitor.Enter(obj); //代码段 Monitor.Exit(obj); Monitor的常用属性和方法: Enter(Object) 在指定对象上获取排他锁. Exit(Object) 释放指定对象上的排他锁. Pulse 通知等待队列中的线程锁定对象状态的更改. PulseAll 通知所有的等待线程对象状态的更改. T

  • C# 如何获取当前进程或线程的ID

    目录 获取当前进程或线程的ID C# 进程读取方法 获取当前进程或线程的ID 如果获得当前进程的Id用: Process[] processes = Process.GetProcesses();  foreach(Process process in processes)  {  if(process.ProcessName == "进程名"  {  MessageBox.Show(process.Id);  }  } Process processes   =Process.Get

  • C#使用ThreadPriority设置线程优先级

    一.简介 如果在应用程序中有多个线程在运行,但一些线程比另一些线程重要,这种情况下可以在一个进程中为不同的线程指定不同的优先级.线程的优先级可以通过Thread类Priority属性设置,Priority属性是一个ThreadPriority型枚举,列举了5个优先等级:AboveNormal.BelowNormal.Highest.Lowest.Normal.公共语言运行库默认是Normal类型的. 二.代码 class Program { static void Main(string[] a

  • C#使用LOCK实现线程同步

    一.简介 线程安全概念:线程安全是指在当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用.不会出现数据不一致或者数据污染. 线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等.当多个线程同时读写同一份共享资源的时候,可能会引起冲突.这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一团.线程同步的真实意思和字面意思恰好相反.线程同步的真实意思,其实是“排队”:几个线程之间要排队,一个一个对共享资源进行操

  • C#多线程的ResetAbort()方法

    一.简介 Abort方法可以通过跑出ThreadAbortException异常中止线程,而使用ResetAbort方法可以取消中止线程的操作,下面通过代码演示使用 ResetAbort方法. 二.代码 class Program { static void Main(string[] args) { Thread thread = new Thread(ThreadMethod); //执行的必须是无返回值的方法 thread.Name = "子線程A"; thread.Start(

  • JAVA多线程中join()方法的使用方法

    虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正在运行多个线程时,join()到底是暂停了哪些线程,大部分博客给的例子看起来都像是t.join()方法会使所有线程都暂停并等待t的执行完毕.当然,这也是因为我对多线程中的各种方法和同步的概念都理解的不是很透彻.通过看别人的分析和自己的实践之后终于想明白了,详细解释一下希望能帮助到和我有相同困惑的同学. 首先给出结论:t.join()方法只会使主线程(或者说调用t.join()的

  • C#多线程的Join()方法

    一.简介 Join方法主要是用来阻塞调用线程,直到某个线程终止或经过了指定时间为止.官方的解释比较乏味,通俗的说就是创建一个子线程,给它加了这个方法,其它线程就会暂停执行,直到这个线程执行完为止才去执行(包括主线程). 二.代码 class Program { static void Main(string[] args) { Thread threadA = new Thread(ThreadMethod); threadA.Name = "線程A"; Thread threadB

  • Java多线程join方法实例代码

    本文研究的主要是Java多线程中join方法的使用问题,以下文为具体实例. Thread的非静态方法join()让一个线程B"加入"到另外一个线程A的尾部.在A执行完毕之前,B不能工作.例如: Thread t = new MyThread(); t.start(); t.join(); 另外,join()方法还有带超时限制的重载版本. 例如t.join(5000);则让线程等待5000毫秒,如果超过这个时间,则停止等待,变为可运行状态. 线程的加入join()对线程栈导致的结果是线程

  • 浅谈java多线程 join方法以及优先级方法

    join: 当A线程执行到了B线程的.join()方法时,A就会等待.等B线程都执行完,A才会执行. join可以用来临时加入线程执行. 1.线程使用join方法,主线程就停下,等它执行完,那么如果该线程冻结了,主线程就挂了,这也是为什么线程要抛异常的原因 2.当两个或以上线程开启了,这个A线程才使用join方法,那么主线程还是停下,这几个个线程交替进行,直到A执行完,主线程才复活 1. tostring(),方法,获取线程具体的名字,优先级 2. 优先级代表抢资源的频率 3. java中设置有

  • Python多线程以及多线程中join()的使用方法示例

    Python多线程与多进程中join()方法的效果是相同的. 下面仅以多线程为例: 首先需要明确几个概念: 知识点一: 当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流的最小单元,当设置多线程时,主线程会创建多个子线程,在python中,默认情况下(其实就是setDaemon(False)),主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束, 见下面 例子一. 知识点二: 当我们使用setDaemon(True)方法,设置子线程为守护线程时,

  • java多线程join()方法的作用和实现原理解析(应用场景)

    1.join() 方法的作用 这个方法的作用是先将当前线程挂起,待其他线程结束后在执行当前线程的代码: 2.应用场景 比如有三个人小红.小李.小王, 三个人相约一起去酒店吃饭,菜已经点好了, 三个人从不同的地方出发,只有三个人都到了酒店之后才会开始上菜:那么这三个人就分别代表三个线程,这三个线程执行完之后才会执行 "上菜" 的代码逻辑, 代码示例 package com.Lock; /** * join方法示例 * 比如有三个人小红.小李.小王, 三个人相约一起去酒店吃饭,菜已经点好了

  • java基本教程之join方法详解 java多线程教程

    本章涉及到的内容包括:1. join()介绍2. join()源码分析(基于JDK1.7.0_40)3. join()示例 1. join()介绍join() 定义在Thread.java中.join() 的作用:让"主线程"等待"子线程"结束之后才能继续运行.这句话可能有点晦涩,我们还是通过例子去理解: 复制代码 代码如下: // 主线程public class Father extends Thread {    public void run() {     

  • Java多线程中关于join方法的使用实例解析

    先上代码 新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String name; public MyThread(String name) { this.name = name; } @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println(name+"[&

  • java多线程编程之join方法的使用示例

    在上面的例子中多次使用到了Thread类的join方法.我想大家可能已经猜出来join方法的功能是什么了.对,join方法的功能就是使异步执行的线程变成同步执行.也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法.如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完.而使用join方法后,直到这个线程退出,程序才会往下执行.下面的代码演示了join的用法.

  • 基于多线程中join()的用法实例讲解

    Thread中,join()方法的作用是调用线程等待该线程完成后,才能继续用下运行. public class TestThread5 { public static void main(String[] args) throws InterruptedException { Runner0 run5 = new Runner0(); Thread th5 = new Thread(run5); th5.start(); th5.join();//join()方法用在此处是为了等待主线程结束后运

随机推荐