线程基础一 前台线程与后台线程

时间:2021-08-10 18:40:42

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

  通过定义两个线程,并手动的设置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先行结束,后台线程执行结束不影响前台线程的继续执行。

线程基础一 前台线程与后台线程