zoukankan      html  css  js  c++  java
  • c# Thread——1.为什么Abort中断线程是不可靠的

    Thread.Abort 方法在c#中用作强制中断线程的执行,大多用于线程内部满足某个特定条件而自己调用关闭自身,比如下面的代码在i自增到3的时候就会停止打印。

    class Program
        {
            static void Main(string[] args)
            {
                Thread thread = new Thread(ShowMessage);
                thread.Start();
                Console.Read();
            }
            public static void ShowMessage()
            {
                int i = 0;
                while (true)
                {
                    if (i == 3)
                        Thread.CurrentThread.Abort();
                    Console.WriteLine("hello");
                    Thread.Sleep(1000);
                    i++;
                }
            }
        }

    结果如下:

     看样子是起作用了,但是原理我们可以看看Abort方法的介绍

     看到这里我相信很多小伙伴们都知道了,其实Abort方法就是给目标线程强制注入了一个异常,导致该线程抛出一个ThreadAbortException的的异常,而中断该线程

    那么相应的为什么说Abort不安全,其实也能够讲得通了,我们可以在子线程中捕获异常,并且调用恢复线程的方法,则Abort失效。

    代码如下所示:

     class Program
        {
            static void Main(string[] args)
            {
                Thread thread = new Thread(ShowMessage);
                thread.Start();
                Console.Read();
            }
            public static void ShowMessage()
            {
                int i = 0;
                while (true)
                {
                    try
                    {
                        if (i == 3)
                            Thread.CurrentThread.Abort();
                    }
                    catch (ThreadAbortException ex)
                    {
                        Console.WriteLine("休想停掉我!!!");
                        Thread.ResetAbort();//恢复线程
                    }
                    Console.WriteLine("hello");
                    Thread.Sleep(1000);
                    i++;
                }
            }
        }

    看看效果:

     此时的Abort就没有任何作用了。

  • 相关阅读:
    silverlight.js详解.
    Silverlight做随机图形
    腾讯与微软合作,准备应用Silverlight技术
    Flex的起步推动新语言学习
    微软Silverlight将支持DRM数字保护
    Kit 3D 更新
    用silverlight来开发简单的相册.
    加班一星期的结果
    构建Flex应用的10大误区
    ubuntu下SVN服务器安装配置 下的svn 常用命令
  • 原文地址:https://www.cnblogs.com/qwqwQAQ/p/11909436.html
Copyright © 2011-2022 走看看