`
darrendu
  • 浏览: 196952 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

01_Thread中处理未捕获得异常

阅读更多

1.Thread程序终止有两种方式a.)run方法执行结束 b).run中抛出异常,该异常会被Thread的ThreadGroup层顺流向上传    送,到达ThreadGroup root,尤其进行处理

 

2.通过UncaughtExceptionHandler来完成ThreadGroup异常处理的工作

  public class BubbleSortThread extends Thread {

	private int[] numbers;
	
	
	
	public BubbleSortThread(int[] numbers) {
		setUncaughtExceptionHandler(new SimpleThreadExceptionHandler());
		this.numbers = numbers;
	}
	
	@Override
	public void run() {
		
		int index = numbers.length;
		boolean finished = false;
		
		while(!finished){
			index--;
			finished = true;
			
			for(int i=0;i<index;i++){
				
				if(numbers[i] < 0)throw new RuntimeException("不能为负数!");
				
				if(numbers[i] > numbers[i+1]){
					int temp = numbers[i];
					numbers[i] = numbers[i+1];
					numbers[i+1] = temp;
				}
				
				finished = false;
			}
		}
		
System.out.println("run finished.....");
	}

	private static void printArray(int[] numbers){
		
		for(int temp : numbers){
			System.out.print(temp+",");
		}
		System.out.println();
	}

	public static void main(String[] args) {
		int[] numbers = new int[]{3,1,4,7,23,3,45,23};
		Thread t = new BubbleSortThread(numbers);
		t.start();
		
		try {
			t.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		printArray(numbers);
		
		int[] numbers2 = new int[]{-3,-1,-4,-7,-23,-3,-45,-23};
		Thread t2 = new BubbleSortThread(numbers2);
		t2.start();
		
		try {
			t2.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		printArray(numbers2);
	}

}

class SimpleThreadExceptionHandler implements Thread.UncaughtExceptionHandler{

	public void uncaughtException(Thread t, Throwable e) {
		System.out.println(".....");
		System.out.println("theandName:"+t.getName()+e.getMessage()+e.getStackTrace()[0].getLineNumber()+e.getStackTrace()[0].getFileName());
	}
	
}

 

setUncaughtExceptionHandler(new SimpleThreadExceptionHandler());
   设定Thread的UncaughtExceptionHandler,此Thread的throw异常,都会被SimpleThreadExceptionHandler自动处理
分享到:
评论

相关推荐

    RT-Thread常见函数.zip_RTT_rt thread_rt-thread函数_rt_thread函数_手册

    《RT-Thread常见函数》是针对RT-Thread实时操作系统中常用函数的一份详细参考资料,旨在帮助开发者更好地理解和应用RTT的API。RT-Thread(简称RTT)是一款成熟、稳定且功能丰富的开源实时操作系统,广泛应用于物联网...

    Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll 问题处理

    加载sklearn库有可能遇到Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll 问题,解决卸载掉numpy,scipy,sklearn三个库重新安装,资源的版本为py35,cpu,64位,全程分别为numpy-1.15.4+mkl-cp35-cp35m-win_...

    Thread捕捉异常示例

    在这个例子中,如果`thread`线程抛出了未捕获的异常,`CustomExceptionHandler`的`uncaughtException`方法会被调用,从而允许我们优雅地处理异常,而不是让线程简单地终止。 另外,`Thread.sleep()`和`synchronized...

    test1-RT-THREAD.zip_RT_Thread_rt thread_thread

    RT-Thread是一个开源、免费、中立、高性能的实时操作系统(RTOS),广泛应用于物联网(IoT)设备和嵌入式系统中。线程,也称为任务,是RTOS中的基本执行单元,它负责执行特定的功能。本篇文章将深入探讨RT-Thread中的...

    RT_thread1.20源码

    RT_Thread支持多种文件系统,如FAT32、LittleFS等,使得嵌入式设备也能像普通计算机一样处理文件。 七、网络协议栈 RT_Thread内置了lwIP网络协议栈,支持TCP/IP协议族,包括TCP、UDP、ICMP、ARP等,实现了基本的...

    android_异常处理_对异常进行全局捕捉

    在Android开发中,异常处理是一个重要环节,尤其是在产品发布后,为了确保应用的稳定性和良好的用户体验,对异常进行全局捕捉就显得尤为重要。Android提供了UncaughtExceptionHandler接口,用于全局捕捉未捕获的异常...

    android工程全局异常处理-将未处理异常日志保存在文件中,可后续开发提交至服务器

    在Android应用开发中,异常处理是一项至关重要的...总的来说,通过创建一个全局的`ExceptionHandler`,我们可以有效地捕获和记录应用中的未处理异常,这不仅提高了用户体验,也为后续的调试和优化提供了宝贵的数据。

    rt_thread实时系统

    例如,源代码中通常包含内核组件、任务管理、内存管理、中断处理等关键模块;库文件提供了预编译好的函数库,便于快速集成到项目中;配置工具则帮助开发者调整系统参数,适应不同的硬件条件和实时需求;示例项目则...

    ACE_Thread.txt ACE_Thread.txt ACE_Thread.txt ACE_Thread.txt ACE_Thread.txt ACE_Thread.txt

    ACE_Thread是ACE框架中用于处理线程操作的一个核心类。在给定的部分内容中,可以看到对`ACE_Task&lt;ACE_MT_SYNCH&gt;`类的定义和使用。`ACE_Task`是ACE框架中用于实现多线程任务处理的一个重要类,它提供了线程启动、关闭...

    Threadx_html.rar_ ThreadX_Threadx_html_threadx_数据结构

    在ThreadX的基础上,开发人员可以构建复杂而高效的应用程序,特别是在物联网(IoT)设备和工业自动化领域中广泛应用。这个"Threadx_html.rar_ ThreadX_Threadx_html_threadx_数据结构"压缩包包含了一份关于ThreadX的...

    nuc980_rt_thread_soem_is620n

    在本文中,我们将深入探讨如何将RT-Thread实时操作系统(RTOS)成功地移植到NUC980微控制器上,并实现对汇川科技IS620N EtherCAT从站控制器的驱动支持。这个项目名为“nuc980_rt_thread_soem_is620n”,涵盖了嵌入式...

    STM32L152_rt_thread.rar

    2. 设置中断和异常处理:确保rt_thread能够正确响应中断,这是RTOS实现任务调度的基础。 3. 初始化内存管理:rt_thread需要内存池来分配任务堆栈和其他内核对象,开发人员需要配置合适的内存区域供其使用。 4. 移植...

    delphi线程异常处理

    // 在这里处理异常,例如记录错误日志 ShowMessage('线程发生异常: ' + E.Message); end; finally // 在finally块中,你可以清理资源,确保线程退出时资源被正确释放 end; end; ``` 在上面的例子中,当线程中...

    arm_threadX.zip_cardlka_fasterbrz_os arm_threadx_threadx arm

    标题 "arm_threadX.zip_cardlka_fasterbrz_os arm_threadx_threadx arm" 提供的信息暗示这是一个与ARM架构相关的项目,使用了ThreadX操作系统,并且可能涉及到性能优化(如cardlka和fasterbrz可能代表特定的优化技术...

    com_thread.zip_C++ 车检_thread_com

    在C++中,这可以通过异常处理(try-catch块)来实现,或者通过返回值和错误码来指示失败情况。 6. **代码组织**:在"com_thread.c"文件中,我们期望看到的是一个结构化的程序,可能包含初始化串口、创建并运行发送...

    rt_thread在stm32上的移植说明

    在移植过程中,我们需要为STM32的每个中断源编写相应的中断服务例程,并将其注册到rt_thread的中断管理系统中。 3. 上下文切换: 上下文切换是RTOS的核心功能之一,它涉及到处理器状态的保存和恢复。在STM32上,上...

    rt-thread-master.zip_ARM thread_RT-Thread_RT_Thread_arm open sou

    在RT-Thread中,"thread"或"RT_Thread"指的是操作系统的核心组件——线程。线程是操作系统中并发执行的最小单元,它们共享同一地址空间,通过上下文切换实现多任务处理。RT-Thread支持抢占式调度和协作式调度,使得...

    RT_Thread学习资源

    RT_Thread学习资源包含了一系列关于RT_thread实时操作系统的深入学习材料,是个人在探索与实践RT_thread过程中积累的宝贵笔记。RT_thread是一个强大的、开源的、轻量级的实时操作系统,适用于各种嵌入式设备,从微...

    QtThread_handletaj_dozenjqq_thread_

    `QtThread`的使用涉及到很多细节,如正确地启动、停止线程,避免内存泄漏,处理异常,以及理解事件循环和线程之间的关系等。合理的线程设计和管理可以极大地提升程序的并发性能,降低资源消耗,为用户带来更好的体验...

    threadX_Arm.rar___gh_lock_init_arm operating_arm threadx_threadx

    标题中的"threadX_Arm.rar___gh_lock_init_arm operating_arm threadx_threadx"提到了几个关键元素:threadX、ARM、gh_lock_init、arm_operating和arm_threadx。这些元素代表了嵌入式系统开发中的特定知识点,我们将...

Global site tag (gtag.js) - Google Analytics