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常见函数》是针对RT-Thread实时操作系统中常用函数的一份详细参考资料,旨在帮助开发者更好地理解和应用RTT的API。RT-Thread(简称RTT)是一款成熟、稳定且功能丰富的开源实时操作系统,广泛应用于物联网...
加载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`线程抛出了未捕获的异常,`CustomExceptionHandler`的`uncaughtException`方法会被调用,从而允许我们优雅地处理异常,而不是让线程简单地终止。 另外,`Thread.sleep()`和`synchronized...
RT-Thread是一个开源、免费、中立、高性能的实时操作系统(RTOS),广泛应用于物联网(IoT)设备和嵌入式系统中。线程,也称为任务,是RTOS中的基本执行单元,它负责执行特定的功能。本篇文章将深入探讨RT-Thread中的...
RT_Thread支持多种文件系统,如FAT32、LittleFS等,使得嵌入式设备也能像普通计算机一样处理文件。 七、网络协议栈 RT_Thread内置了lwIP网络协议栈,支持TCP/IP协议族,包括TCP、UDP、ICMP、ARP等,实现了基本的...
在Android开发中,异常处理是一个重要环节,尤其是在产品发布后,为了确保应用的稳定性和良好的用户体验,对异常进行全局捕捉就显得尤为重要。Android提供了UncaughtExceptionHandler接口,用于全局捕捉未捕获的异常...
在Android应用开发中,异常处理是一项至关重要的...总的来说,通过创建一个全局的`ExceptionHandler`,我们可以有效地捕获和记录应用中的未处理异常,这不仅提高了用户体验,也为后续的调试和优化提供了宝贵的数据。
例如,源代码中通常包含内核组件、任务管理、内存管理、中断处理等关键模块;库文件提供了预编译好的函数库,便于快速集成到项目中;配置工具则帮助开发者调整系统参数,适应不同的硬件条件和实时需求;示例项目则...
ACE_Thread是ACE框架中用于处理线程操作的一个核心类。在给定的部分内容中,可以看到对`ACE_Task<ACE_MT_SYNCH>`类的定义和使用。`ACE_Task`是ACE框架中用于实现多线程任务处理的一个重要类,它提供了线程启动、关闭...
在ThreadX的基础上,开发人员可以构建复杂而高效的应用程序,特别是在物联网(IoT)设备和工业自动化领域中广泛应用。这个"Threadx_html.rar_ ThreadX_Threadx_html_threadx_数据结构"压缩包包含了一份关于ThreadX的...
在本文中,我们将深入探讨如何将RT-Thread实时操作系统(RTOS)成功地移植到NUC980微控制器上,并实现对汇川科技IS620N EtherCAT从站控制器的驱动支持。这个项目名为“nuc980_rt_thread_soem_is620n”,涵盖了嵌入式...
2. 设置中断和异常处理:确保rt_thread能够正确响应中断,这是RTOS实现任务调度的基础。 3. 初始化内存管理:rt_thread需要内存池来分配任务堆栈和其他内核对象,开发人员需要配置合适的内存区域供其使用。 4. 移植...
// 在这里处理异常,例如记录错误日志 ShowMessage('线程发生异常: ' + E.Message); end; finally // 在finally块中,你可以清理资源,确保线程退出时资源被正确释放 end; end; ``` 在上面的例子中,当线程中...
标题 "arm_threadX.zip_cardlka_fasterbrz_os arm_threadx_threadx arm" 提供的信息暗示这是一个与ARM架构相关的项目,使用了ThreadX操作系统,并且可能涉及到性能优化(如cardlka和fasterbrz可能代表特定的优化技术...
在C++中,这可以通过异常处理(try-catch块)来实现,或者通过返回值和错误码来指示失败情况。 6. **代码组织**:在"com_thread.c"文件中,我们期望看到的是一个结构化的程序,可能包含初始化串口、创建并运行发送...
在移植过程中,我们需要为STM32的每个中断源编写相应的中断服务例程,并将其注册到rt_thread的中断管理系统中。 3. 上下文切换: 上下文切换是RTOS的核心功能之一,它涉及到处理器状态的保存和恢复。在STM32上,上...
在RT-Thread中,"thread"或"RT_Thread"指的是操作系统的核心组件——线程。线程是操作系统中并发执行的最小单元,它们共享同一地址空间,通过上下文切换实现多任务处理。RT-Thread支持抢占式调度和协作式调度,使得...
RT_Thread学习资源包含了一系列关于RT_thread实时操作系统的深入学习材料,是个人在探索与实践RT_thread过程中积累的宝贵笔记。RT_thread是一个强大的、开源的、轻量级的实时操作系统,适用于各种嵌入式设备,从微...
`QtThread`的使用涉及到很多细节,如正确地启动、停止线程,避免内存泄漏,处理异常,以及理解事件循环和线程之间的关系等。合理的线程设计和管理可以极大地提升程序的并发性能,降低资源消耗,为用户带来更好的体验...
标题中的"threadX_Arm.rar___gh_lock_init_arm operating_arm threadx_threadx"提到了几个关键元素:threadX、ARM、gh_lock_init、arm_operating和arm_threadx。这些元素代表了嵌入式系统开发中的特定知识点,我们将...