前台线程与后台线程之分

一、  前台线程和后台线程的主要区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。

*注意:通过Thread类创建的线程都是前台线程。线程池ThreadPool 中的线程都是后台线程

        static void Main(string[] args)
        {
            Thread t1 = new Thread(ThreadNew);
                   t1.Name = "NewThread";
                       //IsBackground属性设置为false时 线程 NewThread是可以在主线程执行完毕后打印出两条消息的
                       //IsBackground如果为true,则在主线程结束后,就打印不出第二条消息了 因为主线程(前台线程)结束了,后台线程也就跟着退出了。
                   t1.IsBackground = true;
                   t1.Start();
           Console.WriteLine("主线程已经结束");
        }
        static void ThreadNew()
        {
            Console.WriteLine("新的线程开始输出消息");
            Thread.Sleep(4000);//停止4秒中让主线程可以比NewThread提前结束
            Console.WriteLine("新的线程结束输出消息");
            Console.ReadKey();
        }
    }

二、前台线程和后台线程适合的场合

通常,应该将被动侦听活动的线程设置为后台线程,而将负责发送数据的线程设置为前台线程,这样,在所有的数据发送完毕之前该线程不会被终止。

只有在确认线程被系统随意终止没有不利影响时,才应该使用后台线程。如果线程正在执行必须完成的敏感操作或事务操作,或者需要控制关闭线程的方式以便释放重要资源,则使用前台线程

原文地址:https://www.cnblogs.com/zhuangsl/p/11241240.html

时间: 2024-10-10 13:41:45

前台线程与后台线程之分的相关文章

C#前台线程与后台线程的区别和联系 (转)

.Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程.这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出:而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束. .net环境使用Thread建立的线程默认情况下是前台线程,即线程属性IsBackground=false,在进程中,只要有一个前台线程未退出,进程就不会终止.主线程就是一个前台线程.而后台线程不管

C# 前台线程与后台线程区别

using System; using System.Drawing; using System.Windows.Forms; using System.Threading; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, Event

C#.Net前台线程与后台线程的区别

本文来自:http://www.cnblogs.com/zfanlong1314/archive/2012/02/26/2390455.html .Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程.这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出:而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束. .Net环境使用Thread建立的线程默认情况下是前

java前台线程和后台线程

main()函数即主函数,是一个前台线程,前台进程是程序中必须执行完成的,而后台线程则是java中所有前台结束后结束,不管有没有完成,后台线程主要用与内存分配等方面.                                                                                           前台线程和后台线程的区别和联系: 1.后台线程不会阻止进程的终止.属于某个进程的所有前台线程都终止后,该进程就会被终止.所有剩余的后台线程都会停止且不会

前台线程和后台线程的选择

什么时候用Thread ,, 什么时候用 ThreadPool.. 当符合以下条件时就用Thread对象,否则还是用线程池较好. 1.你需要线程允许一个非普通优先级.所有的线程池线程都允许在普通优先级.当然,这你可以改变,但是不推荐,在线程池操作过程中,优先级的改变不会持续. (线程的优先级..前台线程要高于后台线程.即使改变了后台线程的优先级..也不会持久) 2.你需要线程作为前台线程运转,从而防止程序终止一直到线程完成任务.线程池线程总是后台线程,如果CLR决定终止进程它们就不会完成任务.

后台与前台线程

摘自MSDN 托管线程或者是后台线程,或者是前台线程.后台线程不会使托管执行环境处于运行状态,除此之外,后台线程与前台线程是一样的.一旦所有前台线程在托管进程(其中 .exe 文件是托管程序集)中被停止,系统将停止所有后台线程并关闭. 注意 当运行库因为进程关闭而停止某个后台线程时,不会在该线程中引发异常.但是,当线程是因为 System.AppDomain.Unload(System.AppDomain) 方法卸载应用程序域而停止时,将同时在后台和前台线程中引发 ThreadAbortExce

线程系列01,前台线程,后台线程,线程同步

在控制台应用程序集中,Main方法开始的是一个线程.如果要再创建线程,需要用到System.Threading这个命名空间. □ 创建第一个线程 using System; using System.Threading; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { var thread = new Thread(DoSth); thread.Start(); } static

08_控制线程_后台线程(守护线程)

[后台线程] 后台线程(Daemon Thread):运行在后台,他的任务是为其它的线程提供服务,又称为"守护线程".JVM的垃圾回收线程就是典型的后台线程. [ 特征 ] 如果所有的前台线程都死亡,后台线程会自动死亡. 调用Thread对象的setDaemon(true)方法可以将指定的线程设置成后台线程. 当整个虚拟机中只剩下后台线程时,程序就没有继续运行的必要了,所以虚拟机也就退出了. Thread类提供了一个isDaemon()方法,用来判断指定线程是否为后台线程. [示例代码

守护线程(后台线程)与非守护线程(用户线程,前台线程)

当前台线程结束后,jvm将直接杀死后台线程,并且后台线程不会去执行finally代码块中的内容 public class DemoThread implements Runnable { @Override public void run() { // TODO Auto-generated method stub try { Thread.currentThread().sleep(1000); System.out.println("我是非守护线程"); } catch (Inte