原先多线程并发编程的学习笔记和代码整理一下贴上来。
---------------------------------
javase5提供了一个新接口Thread.UncaughtExceptionHandler,该接口当Thread因未捕获的异常而突然终止时,调用处理程序。
举例:
首先定义一个任务。
class ExceptionThread implements Runnable{ @Override public void run(){ System.out.println("current thread name:"+Thread.currentThread().getName()); throw new RuntimeException(); } }
该任务在执行run方法时抛出一个RuntimeException,用来测试线程异常的捕获。
实现Thread.UncaughtExceptionHandler接口,处理捕获的异常:
class CustomUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler{ @Override public void uncaughtException(Thread t, Throwable e) { System.out.println("thread name:" + t.getName()); System.out.println("throwable:" + e); } }
这个异常处理器只是将抛出异常线程的名称和异常信息打印出来。
下面要对每个创建的线程都设置异常处理器,就需要使用到ThreadFactory。
使用ThreadFactory就无需再手工编写对new Thread的调用了,从而允许应用程序使用特殊的线程子类、属性等等。
class HandlerThreadFactory implements ThreadFactory{ @Override public Thread newThread(Runnable r) { Thread t=new Thread(r); t.setUncaughtExceptionHandler(new CustomUncaughtExceptionHandler()); System.out.println("thread name:"+t.getName()); return t; } }
这里在创建线程时,同样打印出了线程名称。
最后创建线程池,以HandlerThreadFactory作为线程工场,每次创建线程时都会回调newThread方法。
ExecutorService es = Executors.newCachedThreadPool(new HandlerThreadFactory()); es.execute(new ExceptionThread());
执行后输出:
thread name:Thread-0 current thread name:Thread-0 thread name:Thread-0 throwable:java.lang.RuntimeException
当然,也可以不用为每个线程都设置异常处理器,直接设置默认的异常处理器。
Thread.setDefaultUncaughtExceptionHandler(new CustomUncaughtExceptionHandler()); ExecutorService es = Executors.newCachedThreadPool(); es.execute(new ExceptionThread());
默认的异常处理器,只有在不存在专有的UncaughtExceptionHandler时才会被调用。
相关推荐
│ 高并发编程第一阶段32讲、如何捕获线程运行期间的异常.mp4 │ 高并发编程第一阶段33讲、ThreadGroup API介绍之一.mp4 │ 高并发编程第一阶段34讲、ThreadGroup API介绍之二.mp4 │ 高并发编程第一阶段35讲、...
│ 高并发编程第一阶段32讲、如何捕获线程运行期间的异常.mp4 │ 高并发编程第一阶段33讲、ThreadGroup API介绍之一.mp4 │ 高并发编程第一阶段34讲、ThreadGroup API介绍之二.mp4 │ 高并发编程第一阶段35讲、...
《Java并发编程实践》是Java开发者必读的经典之作,由Brian Goetz等多位专家共同撰写。这本书深入浅出地探讨了Java平台上的并发问题,帮助读者理解和掌握如何编写高效、可靠且可维护的多线程应用程序。以下是该书...
7. **并发编程**:了解Python中的线程和进程,以及GIL(全局解释器锁)对多线程的影响,同时探讨协程和异步IO模型,如asyncio库的使用。 8. **网络编程**:学习如何使用Python进行网络通信,如HTTP请求,TCP/IP套接...
7. **错误处理和异常安全**:理解和实践在网络编程中可能出现的错误情况,如何捕获和处理异常。 8. **安全性**:理解网络安全的基本概念,如加密通信、身份验证和授权。 9. **性能优化**:了解网络延迟、带宽使用...
### C++编程思想(第2版)卷1 ...- **避免竞态条件**:并发环境下的线程安全问题。 通过以上详细的知识点解析,读者可以对《C++编程思想(第2版)卷1》有一个全面而深入的理解,从而更好地掌握C++这门强大的编程语言。
10. **C++新特性**:如果书籍较新,可能会涵盖C++11至C++20的新特性,如右值引用、lambda表达式、类型推断(auto关键字)、并发编程支持等。 通过阅读《深入编程内幕--Visual C++》,读者不仅可以提升C++编程技能,...
7. 并发编程:深入分析C#中的并发编程模型,讲解线程、锁、任务并行库(TPL)、异步编程模型等。 8. 反射和动态类型:探讨在什么情况下使用反射和动态类型是合适的,以及如何安全有效地使用它们。 9. 扩展方法和...
15. **并发编程**:线程和进程的概念,以及使用threading和multiprocessing模块进行并发处理。 16. **数据结构与算法**:栈、队列、堆、图等数据结构的实现,以及排序和搜索算法的理解与应用。 通过解答这些练习题...
5. 多线程与并发编程:Java提供了强大的多线程支持,本书会讲解线程的基本概念、线程的生命周期、线程同步机制、并发工具类等,并讨论在多线程编程中可能遇到的问题和解决方案。 6. I/O流与文件操作:Java提供了...
6. **多线程编程**:讲解并发编程的概念,如线程的创建、同步、互斥与协作,以及线程池的使用,为构建高并发应用打下基础。 7. **反射与动态代理**:深入理解Java反射机制,如何在运行时获取类的信息并操作对象,...
9. **并发编程**:理解线程和进程的概念,以及如何使用Python的threading和multiprocessing库实现并发。 10. **装饰器和上下文管理器**:装饰器可以用于修改函数行为,上下文管理器则用于资源的获取和释放,如with...
多线程是Java的一大亮点,通过Thread类和Runnable接口,可以实现并发执行,提高程序效率。异常处理提供了一种统一的错误处理机制,通过try-catch-finally结构来捕获和处理运行时错误。反射允许程序在运行时动态访问...
VC++提供了对线程的支持,源代码中可能会有线程同步、互斥锁、条件变量等示例,有助于学习并发编程。 7. 异常处理:VC++支持C++标准的异常处理机制。源代码中可能包含如何捕获和处理运行时错误的实例,这是编写健壮...
以上总结了 Java 的核心知识点,涵盖了基本数据类型、控制结构、面向对象编程、异常处理、多线程、集合框架、I/O 操作、常用工具类、设计模式以及图形用户界面等内容。对于初学者而言,掌握这些基础知识是非常重要的...
3. 并发编程:掌握Java并发API,如线程、同步机制、并发集合等,以及如何编写高效、安全的多线程程序。 六、实战应用 通过实例项目,将所学的敏捷开发原则与Java编程技术结合,体验真实的敏捷开发过程,提升问题...
10. **并发编程**:线程和进程的区别,使用threading和multiprocessing库进行多线程或多进程编程。 11. **Web开发**:基础的HTTP协议,使用Flask或Django框架开发Web应用。 12. **数据持久化**:数据库操作,如...
5. **Java并发编程**: - 多线程:掌握如何创建和管理线程,以及线程同步和通信机制。 - 并发工具类:如Semaphore、CyclicBarrier、CountDownLatch等,用于协调多个线程的执行。 6. **JVM原理**: - 类加载机制...
8. **多线程**:探讨Java的并发编程,包括线程的创建、同步机制(如synchronized关键字和wait/notify机制)、线程池以及并发集合类。 9. **网络编程**:介绍Java的套接字编程,包括客户端和服务器端的实现,以及...