ThreadAPI
文章平均质量分 59
ThreadAP学习笔记
嘟嘟嘟嘟嘟嘟222
这个作者很懒,什么都没留下…
展开
-
CompletableFuture
thenCombine() // 两个任务一起执行完成后结果汇总 public static void thenCombine() { CompletableFuture<String> fi = CompletableFuture.supplyAsync(() -> { ThreadUtil.printThreadInfo("厨师炒菜"); ThreadUtil.sleep(200); re原创 2021-07-24 13:57:53 · 93 阅读 · 0 评论 -
Fork-Join API
RecursiveActionRecursiveAction 执行任务没有返回值,只执行一次。分解任务public class MyRecursiveAction extends RecursiveAction { private int beg; private int end; public MyRecursiveAction(int beg, int end) { super(); this.beg = beg; this.end = end; } @Overrid原创 2020-10-05 18:20:56 · 218 阅读 · 0 评论 -
ScheduledExecutorService API计划任务使用
使用callable进行延迟运行public class MyCallableA implements Callable<String> { @Override public String call() throws Exception { String name = Thread.currentThread().getName(); System.out.println(name+" callA start "+ System.currentTimeMillis());原创 2020-10-05 12:40:26 · 353 阅读 · 0 评论 -
ExecutorService API的使用
T invokeAny(Collection<? extends Callable> tasks) throws InterruptedException, ExecutionException;方法取得第一个完成任务的返回结果,具有线程阻塞特性,当第一个任务完成后会调用interrupt()方法中断其他任务,所有其他任务可以根据 if(Thread.currentThread().isTnterrupt()==true) 来判断任务是否继续执行。1 无 if(Thread.curren.原创 2020-10-04 17:54:00 · 176 阅读 · 0 评论 -
CompletionService API的使用
CompletionService 介绍接口CompletionService 是以异步的方式一边产生新任务,一边处理完成的任务结果,可以将任务执行和任务处理分离开,使用submit()执行任务,task()取得已完成的任务,并按照任务的时间顺序处理结果。使用CompletionService 解决Future阻塞的问题Future take() throws InterruptedException ;方法会先将执行完的任务Future对象返回,这样可以部分优化Future的线程阻塞问题,但是接口原创 2020-10-04 15:03:26 · 193 阅读 · 0 评论 -
Future和 callable API的使用
callable与runnable的区别1 callable接口的call()方法有返回值,而runnable的run()没有。2 callable接口的call()方法可以声明抛出异常,而runnable的run()不可以。V get() throws InterruptedException, ExecutionException; 获取线程执行的返回结果,具有阻塞性。V get(long timeout, TimeUnit unit) throws InterruptedException,原创 2020-10-04 11:32:31 · 126 阅读 · 0 评论 -
Phaser API的使用
Phaser 方法int arriveAndAwaitAdvance(); 当前线程到达屏障parties值加1,在此等候条件满足后再向下一个屏障运行,条件不满足时线程呈现阻塞状态。int arriveAndDeregister(); parties值减一;int getPhase();获取已经到达第几个屏障;boolean onAdvance(int phase, int registeredParties);通过新屏障的时候调用。返回true则屏障不等待,Phaser呈现无效/销毁状态,返回fa原创 2020-10-03 16:59:09 · 187 阅读 · 0 评论 -
Semaphore控制并发量
Semaphore 提供的功能是synchronized的升级版,可以实现对并发数量的控制。Semaphore 同步性acquire()方法获得一个许可,release()释放一个许可,Semaphore 可以控制获得许可的线程数量,让线程排队执行任务,保证不会出现非线程安全的问题。(需要控制构造Semaphore 时的参数permits=1)。Semaphore 常用APIacquire(int permits) 指定获取许可个数。release(int permits)指定释放许可个数原创 2020-08-16 15:53:28 · 198 阅读 · 0 评论 -
CountDownLatch 与CyclicBarrier线程组团特性
CountDownLatch 多线程同步辅助类CountDownLatch latch = new CountDownLatch (1); 是给定计数为1,当运行CountDownLatch 类的线程判断计数不为0的时候则呈现等待状态,如果为0则继续运行。计数器无法被重置,计数操作是做的减法。await()实现等待,countDown()继续执行。`运动员比赛测试代码import java.util.concurrent.CountDownLatch;public class MyThread原创 2020-10-02 15:59:05 · 160 阅读 · 0 评论 -
ThreadPoolExecutor的使用(二)
1. ThreadFactory+executor+UncaughtExceptionHandle处理异常对线程池的创建中可以使用自定义的ThreadFactory,使用自定义的ThreadFactory时如果出现异常完全可以自定义处理。MyThreadFactory 自定义的线程工厂,包含自定义的异常处理import java.lang.Thread.UncaughtExceptionHandler;import java.util.concurrent.ThreadFactory;publi原创 2020-08-02 15:15:04 · 339 阅读 · 0 评论 -
ThreadPoolExecutor的使用(一)
1. 常用的构造方法corePoolSize : 核心线程数maximumPoolSize : 最大线程数keepAliveTime: 线程数大于 corePoolSize 时,超过此时间则清除多余的空闲线程unit: keepAliveTime的时间单位BlockingQueue : 保存线程的任务队列 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSi原创 2020-08-02 12:46:31 · 198 阅读 · 0 评论 -
Executor接口与Executors创建简单线程池
Executor接口介绍Executor接口仅仅是定义了一种规范,没有实现任何功能。API接口源码public interface Executor { /** * Executes the given command at some time in the future. The command * may execute in a new thread, in a pooled thread, or in the calling * thread, at原创 2020-08-02 10:36:27 · 163 阅读 · 0 评论