精华内容
下载资源
问答
  • 另一个线程为前台线程,任务是线程开始,休眠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

    展开全文
  • 4、托管线程池中的线程都是后台线程,使用new Thread方式创建的线程默认都是前台线程。   下面做个小例子来证实一下,代码如下很简单: class Program { static AutoResetEvent autoEvent =new Auto
  • 2.我们默认创建的线程是前台线程,即主线程,Thread构造的线程。后台线程在线程池中。 3.java程序中,只要还有一个前台线程在运行,这个程序就不会结束,如果一个进程中只有后台线程运行,这个线程就结束了。 4.所有...

    前台线程和后台线程的关系

    1.前台线程就是用户线程,后台线程就是守护线程。
    2.我们默认创建的线程是前台线程,即主线程,Thread构造的线程。后台线程在线程池中。
    3.java程序中,只要还有一个前台线程在运行,这个程序就不会结束,如果一个进程中只有后台线程运行,这个线程就结束了。
    4.所有的后台线程在程序结束时,后台线程结束。应有程序必须在运行完全部的前台程序才可以退出,而不用考虑后台线程是否运行完成。
    5.在启动线程之前调用setDaemon(true)后就是后台线程,反之就是前台线程。

    后台线程前台线程创建

    public class test {
    
    
        public static void main(String[] args){
    //        new TestThread().run();
    //        new TestThread().start();
    //        while (true){
    //            System.out.println("main():"+Thread.currentThread().getName());
    //        }
            Thread t=new TestThread();
            //必须在start()前设置为后台线程
            //不加setDaemon(true)则是前台线程
            t.setDaemon(true);
            t.start();
        }
    
    }
    
    class TestThread extends Thread{
        public void run(){
            while (true){
                System.out.println("run():"+Thread.currentThread().getName());
            }
        }
    }
    
    

    后台线程运行结果
    在这里插入图片描述

    联合线程

    线程的join方法可以把当前线程和当前所在的线程联合成一个线程

    public class test {
    
    
        public static void main(String[] args){
    //        new TestThread().run();
    //        new TestThread().start();
    //        while (true){
    //            System.out.println("main():"+Thread.currentThread().getName());
    //        }
            Thread t=new TestThread();
            //必须在start()前设置为后台线程
    //        t.setDaemon(true);
            t.start();
            int index=0;
            while (true){
                if(index++==100){
                    try {
                        t.join();
                    }catch (InterruptedException e){
                        e.printStackTrace();
                    }
                }
               System.out.println("main():"+Thread.currentThread().getName());
            }
        }
    }
    
    class TestThread extends Thread{
        public void run(){
            while (true){
                System.out.println("run():"+Thread.currentThread().getName());
            }
        }
    }
    

    程序启动时main()和run()方法交替执行,当main()执行了一百遍后将run()的线程合并到main()的线程中。这个时候多线程变成了单线程,只剩下run()在执行,main()的代码没有执行的机会。
    在这里插入图片描述

    展开全文
  • ,由前台线程创建的线程默认也是前台线程。可以通过isDaemon()和setDaemon()方法来判断和设置一个线程是否为后台线程。 区别: 前台线程会各自运行各自的,都运行结束,java程序进程才会结束,前台线程互不干扰 ...
  • 1.线程分类 线程由程序员创建,可是创建的方式不同,总体来说有两种,一种是个人构造,也就是使用thread类new线程对象创建,这一类线程是大部分程序员知道的,也叫专用线程;...前台线程和后台线程 而从回收...
  • 在默认情况下,我们手动创建的线程都是前台线程,而只要有前台线程在运行,应用程序就会一直处在活跃的状态,当然,一旦所有前台线程都结束了,即便还有后台线程存在,应用程序也会结束。 此外,我们还要知道,前台...
  • 前台线程与后台线程的区别

    千次阅读 2016-08-19 09:36:53
    .Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程。这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其...
  • 创建前台线程 static final int REFRESH_COMPLETE = 0X1112; private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { ...
  • C# 前台线程 后台线程

    2017-02-08 10:27:29
    后台线程:后台线程是可以随时被CLR关闭而不引发异常的... 前台线程前台线程是不会被立即关闭的,它的关闭只会发生在自己执行完成时,不受外在因素的影响。假如应用程序退出,造成它的前台线程终止,此时CLR仍然保持
  • 前台线程和后台线程的理解

    千次阅读 2019-12-30 14:34:24
    线程有两种:前台线程和后台线程。 区别是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。 ...
  • //前台线程和后台线程唯一区别就是:应用程序必须运行完所有的前台线程才可以退出; //而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出, //所有的后台线程在应用程序退出时都会自动结束。 ...
  • .net环境中使用thread建立的线程默认情况下是前台线程,即线程属性IsBackground=false,在进程中,只要有一个前台线程未退出,进程就不会终止。主线程就是一个前台线程,而后台线程不管线程是否结束,只要所有的前台...
  • 前台线程:应用程序必须运行完所有的前台线程才能退出,默认创建的线程都是前台线程。 后台线程:应用程序可以不必考虑后台线程是否已经运行完毕(包括正常退出和异常退出),只要所有的前台线程结束,后台线程自动...
  • 前台线程和后台线程

    2012-09-11 15:29:37
    前台线程和后台线程的区别和联系: 1、后台线程不会阻止进程的终止。属于某个进程的所有前台线程都终止后,该进程就会被终止。所有剩余的后台线程都会停止且不会完成。 2、可以在任何时候将前台线程修改为后台...
  • 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
  • C#扫盲之:前台线程后台线程1.线程分类线程由程序员创建,可是创建的方式不同,总体来说有两种,一种是个人构造,也就是使用thread类new线程对象创建,这一类线程是大部分程序员知道的,也叫专用线程;还有一种是由...
  • 前台线程和后台线程 线程默认为前台线程,这意味着任何前台线程在运行都会保持程序存活。 后台线程:只要有一个前台线程在运行,应用程序的进程就在运行。如果多个前台线程在运行,而Main()方法结束了,应用程序...
  • 前台线程与后台线程

    2010-04-18 11:20:00
    这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束,后台线程不会阻止进程终止,一旦...
  • 一直到所有的前台线程终止后,CLR才能关闭应用程序(即卸载承载的应用程序域),换言之,应用程序域必须运行完所有的前台线程才可以退出。 后台线程(有时也叫守护线程,daemonthread),被CLR认为是程序执行中可...
  • main()函数即主函数,是一个前台线程,前台进程是程序中必须执行完成的,而后台线程则是java中所有前台结束后结束,不管有没有完成,后台线程主要用与内存分配等方面。 前台线程和后台线程的区别和联系: 1、后台...
  • 【C#】39. 前台线程与后台线程

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

    千次阅读 2017-01-02 14:41:39
    main()函数即主函数,是一个前台线程,前台进程是程序中必须执行完成的,而后台线程则是java中所有前台结束后结束,不管有没有完成,后台线程主要用与内存分配等方面 前台线程
  • CLR将每个线程要么视为前台线程,要么视为后台线程。一个进程的所有前台线程停止运行时,CLR强制终止仍在运行的任何后台线程。这些后台线程被直接终止;不抛出异常。 所以,应该用前台线程执行确实想要完成的任务,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,990
精华内容 21,996
关键字:

创建前台线程