01.线程

01.开启线程
通过Thread类创建了一个线程对象,然后通过IsBackground属性指明该线程为后台线程,如果不设置,默认为前台线程。由于前台线程执行完毕后CLR会无条件的中止后台线程的运行,所以在前面的代码中,若是启动了后台线程,主线程将会继续执行。

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("前台线程ID:"+Thread.GetCurrentProcessorId());
            Thread thread=new Thread(Worker);
            thread.IsBackground = true; //是否为后台线程
            thread.Start();
            Console.ReadKey();
        }

        public static void Worker()
        {
            Console.WriteLine("后台线程ID:"+Thread.GetCurrentProcessorId());
            Thread.Sleep(2000); //线程休眠2秒
            Console.WriteLine("后台线程退出");
        }
    }

在这里插入图片描述
02.
Join()方法能保证主线程(前台线程)在异步线程thread(后台线程)运行结束后才会运行。
使用函数Join来实现,确保主线程会在后台线程结束后才开始运行
使用Join的时候,主线程会等待后台线程结束之后才能继续执行。前面的代码中,我们使用了Thread构造函数来创建线程对象

    static  void Main(string[] args)
        {
            Thread backthread=new Thread(Worker);
            backthread.IsBackground = true; //后台线程
            backthread.Start();
            backthread.Join(); //保证后台线程完成之后调用主线程
            Thread.Sleep(1000);
            Sum();
        }

        private static void Sum()
        {
            Console.WriteLine("this is main thread" );
            Console.WriteLine("Return from Main Thread");
        } 

        private static void Worker()
        {
            Thread.Sleep(2000);
            Console.WriteLine("Return from Worker Thread");
        }
        

在这里插入图片描述
03.执行带参数的线程
通过ParameterizedThreadStart委托的方式来实现多线程。

  static void Main(string[] args)
        {
            // 创建一个新线程(默认为前台线程) 
            //如果新线程上运行带参数的方法,需要用到ParameterizedThreadStart委托,
            //TreadStart委托仅仅指向无参数且无返回值的方法
            //要求只能有一个参数,且为object类型   无返回值
            Thread backthread = new Thread(new ParameterizedThreadStart(Worker));
            backthread.Start(111);
            Sum();
        }

        private static void Sum()
        {
            Console.WriteLine("this is main thread" );
            Console.WriteLine("Return from Main Thread");
        } 

        private static void Worker(object obj)
        {
            Thread.Sleep(2000);
            Console.WriteLine("Return from Worker Thread:"+obj);
        }

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值