线程已被中止- “Thread was being aborted”

简介: 线程已被中止- “Thread was being aborted” 遇到过这个exception么? 这个exception是为什么而产生的呢? 下面的代码段来自MSDN, 很有说明性.   简单来说, 就是当进程还想继续执行的时候, 发现自己已经被调用过Abort方法了.

线程已被中止- “Thread was being aborted”

遇到过这个exception么? 这个exception是为什么而产生的呢?

下面的代码段来自MSDN, 很有说明性.

 

简单来说, 就是当进程还想继续执行的时候, 发现自己已经被调用过Abort方法了. 既然自己作为线程已经被中止, 就无法执行罗, 于是exception丢了出来.

 

下面的代码来自MSDN, 说明问题:

The following example demonstrates aborting a thread. The thread that receives the ThreadAbortException uses the ResetAbort method to cancel the abort request and continue executing.

   1: using System;
   2: using System.Threading;
   3: using System.Security.Permissions;
   4:  
   5: public class ThreadWork {
   6:     public static void DoWork() {
   7:         try {
   8:             for(int i=0; i<100; i++) {
   9:                 Console.WriteLine("Thread - working."); 
  10:                 Thread.Sleep(100);
  11:             }
  12:         }
  13:         catch(ThreadAbortException e) {
  14:             Console.WriteLine("Thread - caught ThreadAbortException - resetting.");
  15:             Console.WriteLine("Exception message: {0}", e.Message);
  16:             Thread.ResetAbort();
  17:         }
  18:         Console.WriteLine("Thread - still alive and working."); 
  19:         Thread.Sleep(1000);
  20:         Console.WriteLine("Thread - finished working.");
  21:     }
  22: }
  23:  
  24: class ThreadAbortTest {
  25:     public static void Main() {
  26:         ThreadStart myThreadDelegate = new ThreadStart(ThreadWork.DoWork);
  27:         Thread myThread = new Thread(myThreadDelegate);
  28:         myThread.Start();
  29:         Thread.Sleep(100);
  30:         Console.WriteLine("Main - aborting my thread.");
  31:         myThread.Abort();
  32:         myThread.Join();
  33:         Console.WriteLine("Main ending."); 
  34:     }
  35: }

 

下面是输出结果:

Thread - working.

Main - aborting my thread.

Thread - caught ThreadAbortException - resetting.

Exception message: Thread was being aborted.

Thread - still alive and working.

Thread - finished working.

Main ending.

相关文章
|
3月前
|
监控 安全 Java
多线程Thread(初阶一:认识线程)
多线程Thread(初阶一:认识线程)
39 0
|
5月前
|
人工智能 自然语言处理 Linux
进程(process) vs 线程(Thread)
本文主要介绍了进程和线程的基本概念、区别以及操作系统如何调度线程的方式。同时,还介绍了线程锁的核心原理和实现方式。在多线程编程中,理解进程和线程的概念以及线程锁的使用,对于保证程序的安全性和性能非常重要。
44 0
|
5月前
|
Java
多线程与并发,Java中介绍一下Thread类和Runnable接口的区别。
多线程与并发,Java中介绍一下Thread类和Runnable接口的区别。
33 1
|
6月前
|
监控 安全 算法
Thread入门与线程方法详解及多线程安全
Thread入门与线程方法详解及多线程安全
22 0
|
2月前
|
存储 前端开发 算法
C++线程 并发编程:std::thread、std::sync与std::packaged_task深度解析(一)
C++线程 并发编程:std::thread、std::sync与std::packaged_task深度解析
49 0
|
2月前
|
存储 并行计算 Java
C++线程 并发编程:std::thread、std::sync与std::packaged_task深度解析(二)
C++线程 并发编程:std::thread、std::sync与std::packaged_task深度解析
68 0
|
1天前
|
存储 机器学习/深度学习 C++
thread(线程)
**Lua中的协同程序(coroutine)类似线程,有独立栈和局部变量,但它们不能并行,只能单次运行,通过挂起切换。** \n\n**Userdata是自定义数据类型,允许存储C/C++的任意数据到Lua,常用于struct和指针。**
|
26天前
|
Java
Java中的多线程实现:使用Thread类与Runnable接口
【4月更文挑战第8天】本文将详细介绍Java中实现多线程的两种方法:使用Thread类和实现Runnable接口。我们将通过实例代码展示如何创建和管理线程,以及如何处理线程同步问题。最后,我们将比较这两种方法的优缺点,以帮助读者在实际开发中选择合适的多线程实现方式。
24 4
|
5月前
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
19 0
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
|
2月前
|
Java API C++
【C++ 与Qt 线程】C++ std::thread 与Qt qthread多线程混合编程
【C++ 与Qt 线程】C++ std::thread 与Qt qthread多线程混合编程
48 1