zoukankan      html  css  js  c++  java
  • C#线程:只要任何一个线程在运行,程序就不退出?!

    第一次使用线程相关的东西就遇到一个很“奇怪”的问题,明明程序(或者说主线程)已经结束了,但是整个程序就是不退出,赖在进程列表里面!因为以前从来没遇到这个问题,而这个程序是我首次使用线程(土了点,呵呵),问题肯定是出在这里了,因此写了一个控制台程序进行验证,代码如下:
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Text;
     4 using System.Net;
     5 using System.Net.Sockets;
     6 using System.Threading;
     7 
     8 namespace Test
     9 {
    10     class Program
    11     {
    12         static void Main(string[] args)
    13         {
    14             Thread testThread = new Thread(new ThreadStart(Program.TestThread));
    15             testThread.Name = "testThread";
    16             testThread.Start();
    17         }
    18 
    19         static void TestThread()
    20         {
    21             while (true)
    22             {
    23                 Thread.Sleep(0);
    24             }
    25         }
    26     }
    27 }
    28 

    运行上面这个例子,由于线程testThread是个死循环,所以这个线程是不会退出的。但是我的期望是主线程一旦结束,就意味着程序要退出了,那么那些辅助线程应该自动被结束才是。但显然从上面的实验代码运行结果可以看出:只要存在任何一个活动线程,那么进程就持续运行!

    要解决这个问题也非常简单,在Main函数的结尾添加一行:
    1 testThread.Abort();

    那么就一切正常了,不过感觉有点多此一举,而且不明白为什么这么设计,系统完全可以自动帮我们这么做了嘛,难道有什么难以预料的不良后果么???

    // update
    纠正:应该是只要任何一个“前台”线程在运行,程序就无法退出
  • 相关阅读:
    如何自己手写一个热加载(转)
    阻塞I/O、非阻塞I/O和I/O多路复用、怎样理解阻塞非阻塞与同步异步的区别?
    Java NIO浅析 转至 美团技术团队
    mysql在线修改表结构大数据表的风险与解决办法归纳(转)
    MySQL性能优化
    Tomcat Connector(BIO, NIO, APR)三种运行模式(转)
    redis 单线程的理解
    Spring 中的bean 是线程安全的吗?
    Spring 自定义注解,结合AOP,配置简单日志注解 (转)
    redis 分布式锁
  • 原文地址:https://www.cnblogs.com/leafyoung/p/687101.html
Copyright © 2011-2022 走看看