线程已被中止- “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.

目录
打赏
0
0
0
0
13
分享
相关文章
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
83 0
奇迹时刻!探索 Java 多线程的奇幻之旅:Thread 类和 Runnable 接口的惊人对决
【8月更文挑战第13天】Java的多线程特性能显著提升程序性能与响应性。本文通过示例代码详细解析了两种核心实现方式:Thread类与Runnable接口。Thread类适用于简单场景,直接定义线程行为;Runnable接口则更适合复杂的项目结构,尤其在需要继承其他类时,能保持代码的清晰与模块化。理解两者差异有助于开发者在实际应用中做出合理选择,构建高效稳定的多线程程序。
81 7
线程等待(Thread Sleep)
线程等待是多线程编程中的一种同步机制,通过暂停当前线程的执行,让出CPU时间给其他线程。常用于需要程序暂停或等待其他线程完成操作的场景。不同语言中实现方式各异,如Java的`Thread.sleep(1000)`、C#的`Thread.Sleep(1000)`和Python的`time.sleep(1)`。使用时需注意避免死锁,并考虑其对程序响应性的影响。
128 8
【JavaEE】线程创建和终止,Thread类方法,变量捕获(7000字长文)
创建线程的五种方式,Thread常见方法(守护进程.setDaemon() ,isAlive),start和run方法的区别,如何提前终止一个线程,标志位,isinterrupted,变量捕获
【JavaEE】多线程编程引入——认识Thread类
Thread类,Thread中的run方法,在编程中怎么调度多线程
|
5月前
|
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
76 3
|
5月前
|
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
102 2
|
5月前
|
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
82 2
|
5月前
|
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
82 1
优化Java多线程应用:是创建Thread对象直接调用start()方法?还是用个变量调用?
这篇文章探讨了Java中两种创建和启动线程的方法,并分析了它们的区别。作者建议直接调用 `Thread` 对象的 `start()` 方法,而非保持强引用,以避免内存泄漏、简化线程生命周期管理,并减少不必要的线程控制。文章详细解释了这种方法在使用 `ThreadLocal` 时的优势,并提供了代码示例。作者洛小豆,文章来源于稀土掘金。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等