精华内容
下载资源
问答
  • 前台线程和后台线程的区别和联系:1、后台线程不会阻止进程的终止。属于某个进程的所有前台线程都终止后,该进程就会被终止。所有剩余的后台线程都会停止且不会完成。2、可以在任何时候将前台线程修改为后台线程,...

    前台线程和后台线程的区别和联系:

    1、后台线程不会阻止进程的终止。属于某个进程的所有前台线程都终止后,该进程就会被终止。所有剩余的后台线程都会停止且不会完成。

    2、可以在任何时候将前台线程修改为后台线程,方式是设置Thread.IsBackground 属性。

    3、不管是前台线程还是后台线程,如果线程内出现了异常,都会导致进程的终止。

    4、托管线程池中的线程都是后台线程,使用new Thread方式创建的线程默认都是前台线程。

    下面做个小例子来证实一下,代码如下很简单:

    class Program

    {

    static AutoResetEvent autoEvent =new AutoResetEvent(false);

    staticvoid Main()

    {

    Thread newThread =new Thread(new ThreadStart(ThreadMethod));

    //newThread.IsBackground = true;

    Console.WriteLine("主线程开始执行。");

    newThread.Start();

    Console.WriteLine("主线程结束");

    }

    staticvoid ThreadMethod()

    {

    //挂起子线程

    autoEvent.WaitOne();

    Console.WriteLine("子线程执行");

    }

    }

    我在第9行下了个断点,来看一下通过 new Thread方式创建的线程的IsBackground属性,截图如下:

    ecc3d8b263c2a95ee3878000d91eb6e3.png

    可见通过new Thread方式创建的线程,确实是默认为前台线程。

    程序运行的结果如下图:

    38ae69e7ecfa580d5ce640c172509ac5.png

    该控制太程序没有像平时一样自动关闭,而使一直停在那里。并且我们从图中可以看到主线程执行完了,而子线程(前台线程)并没有执行完(因为被autoEvent.WaitOne()方法挂起了)。

    这就说明了前台线程是可以阻止进程的终止的。

    如果将第8行的注释去掉的话,控制台程序将自动终止,大家可以试一下。

    展开全文
  • 另一个线程为前台线程,任务是线程开始,休眠10秒结束,当前台线程结束,计时线程也随之结束。 二、实现代码 public class SleepTest { public static void main(String[] args) { //创建计时线程 Thread ...

    一、题目
    采用匿名内部类的方式创建2个线程,一个线程为计时线程,每隔2s输出当前时间的毫秒表示,
    另一个线程为前台线程,任务是线程开始,休眠10秒结束,当前台线程结束,计时线程也随之结束。
    二、实现代码

    public class SleepTest {
    	public static void main(String[] args) {
    		//创建计时线程
    		Thread thread = new Thread() {
    			@Override
    			public void run() {
    				while(true) {
    					System.out.println(System.currentTimeMillis());
    					try {
    						Thread.sleep(2000);
    					} catch (InterruptedException e) {
    						e.printStackTrace();
    					}}}};
    		
    		Thread thread2 = new Thread() {
    			@Override
    			public void run() {
    				System.out.println("共耗时10s");
    				try {
    					Thread.sleep(10000);
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}}};
    		thread.setDaemon(true);
    		thread.start();
    		thread2.start();
    	}}
    
    
    展开全文
  • 线程10:前台线程和后台线程

    千次阅读 2018-06-08 23:48:28
    (我们默认创建的线程是“前台线程”)。2) 只有所有的前台线程都关闭后,系统才真正的关闭。后台线程,会随着所有前台线程的关闭而自动关闭。3) 后台线程不会阻止进程的中止。属于某个进程的所有前台线程都中止...

    线程分为“前台线程”和“后台线程”。

    1) 应用程序的主线程以及使用Thread构造的线程都默认为前台线程,线程池中的线程是后台线程。(我们默认创建的线程是“前台线程”)。

    2) 只有所有的前台线程都关闭后,系统才真正的关闭。后台线程,会随着所有前台线程的关闭而自动关闭。

    3) 后台线程不会阻止进程的中止。属于某个进程的所有前台线程都中止后,进程就会被中止,所有剩余的后台线程都会停止且不会完成。

    4) 可以在任何时候将前台线程修改为后台线程,方式是设置Thread.Isbackground属性

    5) 通过BeginXXX方法运行的线程都是后台线程

     

    适用场景:

    前台线程:重要核心的或者需要长时间等待的任务(例如:UI界面线程,发送数据的线程)

    源代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading; 


    namespace 前台线程和后台线程
    {
        class Program
        {
            /// <summary>
            /// 学习前台线程与后台线程
            /// </summary>
            public void Test1()
            {
                Thread t1 = new Thread(DownLoadFile);
                t1.Start("abc.mov");
                //添加这句话和不添这句话的区别
                t1.IsBackground = true;


                //这句话的意思是让主线程一直等待,等待后台线程的结束,否则后台线程就不会执行完
                Console.ReadLine();
            }




            public void DownLoadFile(object fileName)
            {
                Console.WriteLine("文件名" + fileName.ToString());
                Console.WriteLine("下载文件" + Thread.CurrentThread.ManagedThreadId);
                Thread.Sleep(5000);
                Console.WriteLine("下载完毕");


            }
            static void Main(string[] args)
            {
                Program obj = new Program();
                obj.Test1();
            }
        }
    }

     

    后台线程:非常适合于完成后台任务,非核心且用于处理时间较短的任务适用。(例如:监听客户端要求,Word拼写检查,自动提示)。

     

    展开全文
  • 默认情况下,显式创建的线程是前台线程前台线程与后台线程的主要区别在于:进程会等待所有的前台线程完成工作后再结束工作,但是如果只剩下后台线程,则会直接结束工作。从下面的小例子可以看出。  通过定义两个...

      当程序启动时定义了两个不同的线程。默认情况下,显式创建的线程是前台线程。前台线程与后台线程的主要区别在于:进程会等待所有的前台线程完成工作后再结束工作,但是如果只剩下后台线程,则会直接结束工作。从下面的小例子可以看出。

      通过定义两个线程,并手动的设置ThreadTwo对象的IsBackground属性为true来创建一个后台线程。通过配置来实现第一个线程会比第二个线程先完成。

    static void Main(string[] args)
            {
                var sampleForeground = new ThreadSample(10);
                var sampleBackground = new ThreadSample(20);
    
                var threadOne = new Thread(sampleForeground.CountNumber);
                threadOne.Name = "Foreground";
                threadOne.IsBackground = false;//默认false,为前台进程
                var threadTwo = new Thread(sampleBackground.CountNumber);
                threadTwo.Name = "BackGround";
                threadTwo.IsBackground = true;
    
                threadOne.Start();
                threadTwo.Start();
            }

     

     

    public class ThreadSample
        {
            private readonly int _iterations;
            public ThreadSample(int iterations)
            {
                _iterations = iterations;
            }
            public void CountNumber()
            {
                for (int i = 0; i < _iterations; i++)
                {
                    System.Threading.Thread.Sleep(TimeSpan.FromSeconds(0.5));
                    Console.WriteLine($"{System.Threading.Thread.CurrentThread.Name} prints {i}");
                }
            }
        }

    通过运行结果可以看出当前台线程运行完成后,程序结束。

    若将ThreadTwo先行结束,后台线程执行结束不影响前台线程的继续执行。

     

    转载于:https://www.cnblogs.com/donyblog/p/10134223.html

    展开全文
  • 默认情况下,您显式创建的线程是前台线程。只要前台线程中的任何一个正在运行,它就可以使应用程序保持活动状态,而后台线程则不会。一旦所有前台线程完成,应用程序结束,所有仍在运行的后台线程终止。 线程的前台/...
  • 2.我们默认创建的线程是前台线程,即主线程,Thread构造的线程。后台线程在线程池中。 3.java程序中,只要还有一个前台线程在运行,这个程序就不会结束,如果一个进程中只有后台线程运行,这个线程就结束了。 4.所有...
  • 4、托管线程池中的线程都是后台线程,使用new Thread方式创建的线程默认都是前台线程。   下面做个小例子来证实一下,代码如下很简单: class Program { static AutoResetEvent autoEvent =new Auto
  • ,由前台线程创建的线程默认也是前台线程。可以通过isDaemon()和setDaemon()方法来判断和设置一个线程是否为后台线程。 区别: 前台线程会各自运行各自的,都运行结束,java程序进程才会结束,前台线程互不干扰 ...
  • 线程默认为前台线程,这意味着任何前台线程在运行都会保持程序存活。 后台线程:只要有一个前台线程在运行,应用程序的进程就在运行。如果多个前台线程在运行,而Main()方法结束了,应用程序的进程就是激活的,...
  • 在默认情况下,我们手动创建的线程都是前台线程,而只要有前台线程在运行,应用程序就会一直处在活跃的状态,当然,一旦所有前台线程都结束了,即便还有后台线程存在,应用程序也会结束。 此外,我们还要知道,前台...
  • 1.线程分类 线程由程序员创建,可是创建的方式不同,总体来说有两种,一种是个人构造,也就是使用thread类new线程对象创建,这一类线程是大部分程序员知道的,也叫专用线程;...前台线程和后台线程 而从...
  • 创建前台线程 static final int REFRESH_COMPLETE = 0X1112; private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { ...
  • 前台线程:应用程序必须运行完所有的前台线程才能退出,默认创建的线程都是前台线程。 后台线程:应用程序可以不必考虑后台线程是否已经运行完毕(包括正常退出和异常退出),只要所有的前台线程结束,后台线程自动...
  • Java前台线程与后台线程

    千次阅读 2018-04-15 23:26:57
    Java前台线程与后台线程 上一篇博客在main()方法中,创建并启动了四个新的线程后,main()方法中的代码执行完毕,此时,方法会结束,main线程也就随之结束了 通过程序的运行结果可以看出,虽然,main线程结束了,...
  • 前台线程和后台线程唯一区别:应用程序必须运行完所有的前台线程才会完全退出,若前台线程未执行完成,关闭应用程序后,应用程序并没有完全退出,在任务管理器中还存在此进程;而对于后台线程,应用程序则可以不考虑...
  • C# 后台线程,前台线程

    千次阅读 2010-06-24 13:55:00
    class Program { static void Main(string[] args) { /* 后台线程 * 只要有一个前台线程运行,应用程序就在... * 默认:Thread类创建的线程是前台线程,线程池中的是后台线程 */ Thread t1 = new
  • 前台线程VS后台线程

    2010-06-01 16:42:00
    .NET Framework 中的所有线程都被指定为前台线程或...在默认情况下,通过创建并启动新的 Thread 对象生成的所有线程都是前台线程,而从非托管代码进入托管执行环境中的所有线程都标记为后台线程。然而,通过修改Thr...
  • C#扫盲之:前台线程后台线程1.线程分类线程由程序员创建,可是创建的方式不同,总体来说有两种,一种是个人构造,也就是使用thread类new线程对象创建,这一类线程是大部分程序员知道的,也叫专用线程;还有一种是由...
  • 【C#】39. 前台线程与后台线程

    千次阅读 2016-12-11 15:33:08
    这篇文章主要介绍一下前台线程...显示创建的线程默认情况下都是前台线程,除非手动设置 IsBackground = True。 using System; using System.Threading; namespace Chapter1.Recipe7 { class Program { static vo
  • 前台线程与后台线程

    2010-03-01 11:32:00
    参考 MSDNhttp://msdn.microsoft.com/zh-cn/library/h339syd0.aspx一旦所有前台线程在托管进程(其中 .exe 文件是托管程序集)中被停止...案例1:创建2个前台线程案例1privatestaticvoidMain(){Threadthread0=newThr...
  • 前台线程和后台线程的区别

    千次阅读 2012-02-28 13:25:49
    参考自:... 一个线程或者是后台线程或者是前台线程(二选一),在C#中,可以通过属性Thread.IsBackground来获取或设置。 默认新创建的线程为前台线程! public bool IsBackground { get; se
  • C#扫盲之:前台线程后台线程 1.线程分类 线程由程序员创建,可是创建的方式不同,总体来说有两种,一种是个人构造,也就是使用thread类new线程对象创建,这一类线程是大部分程序员知道的,也叫...
  • 如果要再创建线程,需要用到System.Threading这个命名空间。 □ 线程是怎样工作的? CLR维护着一个叫"thread scheduler"的机制,这个机制与操作系统交互。"thread scheduler"保证所有的线程有合适的执行时间,那些...
  • 【1】普通线程: 就是指 用户 创建的一般线程,具有个体性,不具有提供公共服务的性质,因此, 通常需要我们在 线程的 循环语句中 手动编写 循环结束语句,也即 线程运行终止的条件语句; 【2】后台线程: 它有...
  • 线程创建线程

    2018-01-05 16:07:00
    在Java中,线程能区分两种不同类型的线程:前台线程和后台线程。这两者的区别就是:应用...新创建的线程默认都是前台线程。如果某个线程对象在启动前调用了 setDaemon(true) 语句,这个线程就会变成后台线程。 ...
  • 默认情况下,你手动创建的线程都是前台线程。 只要由前台线程在运行,那么应用程序就会一直处于活动状态。 但是只有后台线程会跟着主线程结束而结束运行。 一旦所有的前台线程停止,那么应用程序就停止工作了。 注意...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 565
精华内容 226
关键字:

创建前台线程