Thread 多线程 等待 回调函数 获取返回值

Thread 是1.1版本时候的线程 它默认是前台线程

前台线程:进程关闭后,线程还会执行完


无参数多线程

 Console.WriteLine("主线程开始");
            //不带参数的多线程

            ThreadStart sta = () =>
            {
                Thread.Sleep(500);
                Console.WriteLine("线程{0}开始执行方法",Thread.CurrentThread.ManagedThreadId);
            };
            //创建Thread

          
            //实现多线程
            for (int i = 0; i < 5; i++)
            {
                Thread t = new Thread(sta);
                t.Start();
               
            }
          

            Console.WriteLine("主线程结束");

结果



有参数 多线程

Console.WriteLine("主线程开始");
            //带参数多线程

            ParameterizedThreadStart p = t => 
            {
                Thread.Sleep(1000);
                Console.WriteLine("参数为{0},当前线程为{1}",t,Thread.CurrentThread.ManagedThreadId);
            };

            for (int i = 0; i < 5; i++)
            {
                Thread t = new Thread(p);
                t.Start(i);
            }
            Console.WriteLine("主线程结束");

结果



回调函数

 public static void Do3()
        {
            //Thread实现添加回调函数
            //在我看来这就是伪回调
            //正经的回调函数是如果有等待线程的话,等待只会等着方法体完成就算等待完成,而不会等待回调函数完成
            //这种实现方法 会把回调函数也等待完成
            Console.WriteLine("主线程开始");
            ThreadStart sta = () => 
            {
                FirstFun();
                CallBackFun();
            };

            List<Thread> tList = new List<Thread>();


            for (int i = 0; i < 5; i++)
            {
                Thread t = new Thread(sta);
                t.Start();
                tList.Add(t);//加入集合中 方便等待
            }

            //等待

            foreach (Thread t in tList)
            {
                //此效果就是将线程加入主线程当中  起到等待效果
                t.Join();
            }

            Console.WriteLine("主线程结束");
            Console.Read();
        }

        //委托方法
        public static void FirstFun()
        {
            Thread.Sleep(1000);
            Console.WriteLine("这里是主方法体内容,当前线程ID{0}",Thread.CurrentThread.ManagedThreadId);
        }
        //回调函数
        public static void CallBackFun()
        {
            Thread.Sleep(1000);
            Console.WriteLine("这里是回调函数内容,当前线程ID{0}", Thread.CurrentThread.ManagedThreadId);
        }

调用Do3的结果


有回调函数 有返回值

 public static void Do4()
        { 
            //带参数带返回值
            
            ParameterizedThreadStart p = t =>
            {
                string Rvalue = null;           
                Rvalue=FirstFun1((int)t);
                CallBackFun1();
                Console.WriteLine("结果{0}",Rvalue);
            };

            for (int i = 0; i < 5; i++)
            {
                Thread t = new Thread(p);
                t.Start(i);
            }
        
        }

        //委托方法
        public static string FirstFun1(int i)
        {
            Thread.Sleep(1000);
            Console.WriteLine("这里是主方法体内容,当前线程ID{0}", Thread.CurrentThread.ManagedThreadId);
            return i.ToString();
        }
        //回调函数
        public static void CallBackFun1()
        {
            Thread.Sleep(1000);
            Console.WriteLine("这里是回调函数内容,当前线程ID{0}", Thread.CurrentThread.ManagedThreadId);
        }


结果




等待

ThreadStart sta = () => 
            {
                FirstFun();
                CallBackFun();
            };

            List<Thread> tList = new List<Thread>();


            for (int i = 0; i < 5; i++)
            {
                Thread t = new Thread(sta);
                t.Start();
                tList.Add(t);//加入集合中 方便等待
            }

            //等待

            foreach (Thread t in tList)
            {
                //此效果就是将线程加入主线程当中  起到等待效果
                t.Join();
            }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值