C# 面试题-2.前台线程和后台线程

相同点:

前台线程和后台线程,都是 Tread 创建的

区别:

后台线程设置了 IsBackground = true;(默认创建的都是 前台线程)

  • 前台线程:会阻止应用程序退出,直到线程完成任务(主线程结束后,还会等待线程结束才退出)。如果必须等待线程完成才退出的,如退出程序时保存数据时,可以使用前台线程
  • 后台线程:不会阻止应用程序退出,应用程序退出时后台线程会被强制终止(主线程结束后,即使后台线程还没结束,程序也会退出)。如果对线程是否完成没有硬性要求,所做的内容也可以丢失,这时可以使用后台线程

例子:

public static void test_background_thread(Boolean isBackground)
{
    Thread foregroundThread = new Thread(() =>
    {
        Console.WriteLine("前台线程开始运行");
        Thread.Sleep(5000); // 模拟耗时操作
        Console.WriteLine("前台线程结束运行");//如果设置为后台线程后,这里可能不会执行(如果主线程结束,则不会执行)
    });

    foregroundThread.IsBackground = isBackground;//设置为后台线程
    foregroundThread.Start();
    Console.WriteLine("主线程结束");
    // 即使主线程结束,前台线程仍会继续运行,直到完成
}

test_background_thread(false);

输出结果:

主线程结束
前台线程开始运行
前台线程结束运行

test_background_thread(true);

输出结果:

主线程结束
前台线程开始运行

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *