多线程的join阻塞的是哪个线程

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;


namespace ConsoleApp1
{


    class Class1
    {
        public static void ThreadProc()
        {
            for(int i  = 0; i < 10; i++)
            {
                Console.WriteLine("ThreadProc: " + i.ToString());
                Thread.Sleep(1000);
            }
            Console.WriteLine("ThreadProc Exit");
        }
        public static void Thread1()
        {
            for(int i = 0; i < 10; i++)
            {
                Console.WriteLine("第一个线程->" + i.ToString());
                Thread.Sleep(1000);
            }
        }
        public static void Thread2()
        {
            for(int i = 0; i < 50; i++)
            {
                Console.WriteLine("第二个线程->" + i.ToString());
                Thread.Sleep(1000);
            }
        }
    }
}





using System;

using System.Threading;
namespace ConsoleApp1
{
    class Program
    {
        // 结论:1.当所有前台线程结束,所有后台线程终止,当所有后台线程终止,前台线程则不受影响。
        static void Main(string[] args)
        {
            Thread th1 = new Thread(new ThreadStart(Class1.Thread1));
            Thread th2 = new Thread(new ThreadStart(Class1.Thread2));
            th1.Start();
            th2.Start();
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("主线程和两个线程一起在搞事情");
                Thread.Sleep(1000);
            }
            // 术语
            Console.WriteLine("主线程暂停, 等待子线程1运行完毕后继续,线程2正常运行");
            Console.WriteLine("主线程休息了一会,决定等线程一走了再继续搞事情.线程一和线程二搞事情");
            // MSDN上解释: 阻塞调用线程,等待某个线程终止
            // 此处运行结果:暂停了Main线程, 等待th1线程结束,继续Main线程的运行
            // 大白话解释: 暂停当前调用了(线程名.join线程)的当前线程的执行,等待(线程名.join)这个线程名代表的线程执行完毕,再重新运行当前线程。
            th1.Join();
            Console.WriteLine("线程一觉得很无聊,走了");
            for(int i = 0; i < 10; i++)
            {
                Console.WriteLine("主线程在线程一走了后继续搞事情");
                Thread.Sleep(1000);
            }
        }
    }

}


join的用法,如上,大白话讲的话就是说有小明请客吃饭,在饭桌上小明看见了一个不想看见的人,于是推辞说身体不舒服,等那个人走了,小明又回来继续和大家一起吃饭。

而且,作为请客的人,即使小明吃饱了,什么事也没了,他也得在那坐着,不然谁来结账。有些人是跟小明一起来的,有些人是陪小华一起来的。

小明就是被阻塞的线程,那个令他讨厌的人就是需要等待的线程,被阻塞的线程等这个讨厌的家伙走了再继续干活。

被阻塞的线程可以是任何允许的线程!并不一定是主线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值