竞争分量
为解决大量线程竞争问题, 子线程基于分量计算(分量在单线程模型上保证原子性),计算完毕后合并分量取结果;
// Adder: LongAdder, DoubleAdder
// Accumulator: LongAccumulator, DoubleAccumulator
// 初始化
LongAdder adder = new LongAdder();
LongAccumulator accumulator = new LongAccumulator(Math::max, -1);
// 分量计算
adder.add(x); // adder.increment();
accumulator.accumulate(x);
// 获取总量
adder.sum();
accumulator.get();
延时返回
| 相关 | 说明 |
|---|---|
Callable<T> |
异步任务计算 与 Runnable相比有返回值,可抛异常 |
Future<T> |
异步任务结果获取T get([long timeout, TimeUnit unit]):阻塞,直到计算完成返回;boolean cancel(boolean mayInterrupt):取消计算boolean isCancelled():是否在完成前就被取消了boolean isDone():是否任务结束(自然结束或异常死亡) |
FutureTask |
把Callable对象转换成Runnable和FuturefutureTask = new FutureTask<>(callable);new Thread(futureTask).start();result = futureTask.get(); |
异步闩
// 初始化,指定开闩任务数
CountDownLatch latch = new CountDownLatch(4);
// 指派子任务完毕,关闩; 线程阻塞于此
latch.await();
// 子任务执行完毕,通知开闩
latch.countDown();
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。



