zoukankan      html  css  js  c++  java
  • C# Thread3——前台线程后台线程

    默认情况下,显示创建的线程都是前台线程,进程会等待内部所有的前台线程执行完才会结束退出

    1.默认创建的线程都是前台线程

    2.进程会等待所有的前台线程执行完而结束,如果还存在后台线程则会强行中断并且退出。

    3.如果关闭程序,但是还存在前台线程没有结束,则程序并不会被完全关闭,任务管理器中还是可以看到进程。

    3.通过设置Thread.IsBackground属性来设置线程的是前台还是后台。

    例1(两个前台线程)

    class Program
        {
            static void Main(string[] args)
            {
                Thread thread1 = new Thread(Task1);
                Thread thread2 = new Thread(Task2);
                thread1.Start();
                thread2.Start();
            }
            private static void Task1()
            {
                Thread.Sleep(1000);
                Console.WriteLine("hello i am first");
            }
            private static void Task2()
            {
                Thread.Sleep(5000);
                Console.WriteLine("hello i am first");
            }
        }

    控制台会等待两个线程执行完才会退出

    例1(Thread1前台,Thread2后台)

    class Program
        {
            static void Main(string[] args)
            {
                Thread thread1 = new Thread(Task1);
                Thread thread2 = new Thread(Task2);
                thread1.Start();
                thread2.IsBackground = true;//设置2为后台线程
                thread2.Start();
            }
            private static void Task1()
            {
                Thread.Sleep(1000);
                Console.WriteLine("hello i am first");
            }
            private static void Task2()
            {
                Thread.Sleep(5000);
                Console.WriteLine("hello i am first");
            }
        }

    则控制台在执行完Thread1之后就会自动退出,而此时Thread2还未执行完,由于他是后台线程所以被强制中断

    最后:如果程序定义了一个不会完成前台线程,主程序并不会正常结束,所以之前同事遇到一个WPF程序关闭,但是还在占用内存,就很快定位到是某前台线程未执行完成。

  • 相关阅读:
    分布式
    jdk与jre的区别
    rabbitmq
    dicom错误解决
    centos6.5搭建hadoop完整教程
    spark
    Oracle索引扫描
    Oracle的rowid结构解析
    PL/SQL — 集合及常用方法
    PL/SQL — 变长数组
  • 原文地址:https://www.cnblogs.com/qwqwQAQ/p/11939404.html
Copyright © 2011-2022 走看看