Java线程
程序员Aike
Just Keep Coding
-- https://github.com/codeaike/
展开
-
延迟任务与周期任务-Timer&ScheduledThread定时器使用
背景:Timer类负责延迟任务和周期任务,但是Timer存在一些缺陷,因此应该考虑使用ScheduledThreadPoolExecutor来代替它。 Timer缺陷:1、Timer在执行所有定时任务时只会创建一个线程。如果某个任务的执行时间过长,那么将破坏其他TimerTask的定时精确性。2、如果TimerTask抛出了一个未检查异常,那么Timer将表现出糟糕行为。Tim...原创 2018-12-10 20:33:20 · 812 阅读 · 0 评论 -
异步任务的封装与结果获取--CompletableFuture&CompletionService的使用
1、CompletableFuture 可以很方便的实现异步任务的封装 并实现结果的联合等一系列操作,轻松实现 任务的并行package com.csdn.test;import java.util.Arrays;import java.util.List;import java.util.concurrent.CompletableFuture;import java.util....原创 2018-11-22 09:51:48 · 3794 阅读 · 1 评论 -
线程使用--使用setUncaughtExceptionHandler方法注册Runtime异常的处理者
Java多线程1、不允许抛出受检异常,所以必须自己处理受检异常。2、但是RuntimeException不可避免,抛出该异常时子线程会结束,但是主线程不会知道,因为主线程通过try catch无法捕获子线程异常。代码:package com.csdn.test.threadmgr;public class TestUncatchException{ public s...原创 2018-11-20 15:54:32 · 10901 阅读 · 2 评论 -
有依赖的并发任务执行-代码实践(工厂、模板模式、线程池的使用)-原型篇
1、背景一组任务并发执行,如任务A、B、C、D,其中有状态依赖关系,如D依赖C,即C任务执行完毕后,D任务才能开始执行。2、实现思路2.1、接口定义(1) 任务执行(业务处理相关接口)( IDataHolder)(2) 任务依赖接口(IDependTask)(3) 任务状态管理接口(是否完成等)( ITaskMgr)(4) 缓存清理接口(I...原创 2019-01-28 11:33:50 · 609 阅读 · 0 评论 -
浅谈线程池异常捕获(识别线程池使用时的一些坑)
1、线程池使用,提交任务时:使用submit提交子任务,一定要获取返回值Future,通过get方法获取可能出现的异常,并且可以进行捕获(推荐) 使用execute执行子任务,异常可以被抛出,但是主线程不能捕获子任务线程中的异常 使用submit提交子任务,只是提交,不获取返回值future,异常会被封装在子线程内部,不会抛出,主线程也无法捕获2、构建线程池时,推荐使用Thr...原创 2019-04-12 11:24:29 · 6814 阅读 · 1 评论 -
有依赖的并发任务执行-代码实践(工厂、模板模式、线程池的使用)-优化篇
1、背景一组任务并发执行,如任务A、B、C、D,其中有状态依赖关系,如D依赖C,即C任务执行完毕后,D任务才能开始执行。2、实现思路2.1、接口定义2.1.1、业务执行接口定义(1) 业务执行(业务处理相关接口)( IDataHolder)(2) 缓存清理接口(IReleaseCache)2.1.2、任务管理接口定义(1) 任务执行管理接口(IExecute)(2) 锁管理接口(...原创 2019-04-13 16:03:39 · 1077 阅读 · 0 评论