【多线程-前台线程和后台线程】

一.前台和后台线程的区别:

所有前台线程执行完毕以后,应用程序的进程结束。而不论后台进程是否结束。

默认情况下新建的线程为前台线程,可以使用Thread.IsBackground属性查看

        //
        // 摘要: 
        //     获取或设置一个值,该值指示某个线程是否为后台线程。
        //
        // 返回结果: 
        //     如果此线程是后台线程或即将成为后台线程,则为 true;否则为 false。
        //
        // 异常: 
        //   System.Threading.ThreadStateException:
        //     线程已死。
        public bool IsBackground { get; set; }

二.所有前台线程结束,后台线程即使没有结束,该进程也会结束:

class Program
    {
        private static Thread subthread ;
        static void Main(string[] args)
        {
            Thread.CurrentThread.Name = "Main线程";
            Console.WriteLine("{0}后台线程",Thread.CurrentThread.Name+Thread.CurrentThread.IsBackground);// 如果此线程是后台线程或即将成为后台线程,则为 true;否则为 false。
            subthread = new Thread(new ThreadStart(GetShow)); //无参数的入口方法线程
            subthread.Name = "无参数的入口方法线程";
            subthread.IsBackground = true; //设置为后台进程
            subthread.Start();  //开启线程
            Thread.Sleep(2000);
            Console.WriteLine("{0}后台线程", Thread.CurrentThread.Name+Thread.CurrentThread.IsBackground+",结束");
        }

        static void GetShow()
        {
            Console.WriteLine("{0}后台线程", Thread.CurrentThread.Name+Thread.CurrentThread.IsBackground);
            try
            {
                Console.WriteLine("休息4秒");
                Thread.Sleep(4000);
            }
            catch (Exception ex)
            {
                Console.WriteLine("线程被唤醒,只休息了5秒");
                Console.WriteLine(ex.Message);
            }
            Console.WriteLine("{0}后台线程", Thread.CurrentThread.Name+Thread.CurrentThread.IsBackground + ",结束");
        }
    }
【多线程-前台线程和后台线程】_第1张图片

三. 当所有的前台线程结束后,进程才能结束:

即:注释上面的代码: //subthread.IsBackground = true;



你可能感兴趣的:(【多线程-前台线程和后台线程】)