相关文章:
【多线程】一、线程状态切换
【多线程】二、线程优先级&守护线程
【多线程】三、线程访问变量
【多线程】四、线程异常抓捕
【多线程】五、线程池
【多线程】六、锁与同步
【多线程】七、阻塞队列
【多线程】八、异步计算结果获取
【多线程】九、Android异步任务
竞争分量
为解决大量线程竞争问题, 子线程基于分量计算(分量在单线程模型上保证原子性),计算完毕后合并分量取结果;
// 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 和Future futureTask = new FutureTask<>(callable); new Thread(futureTask).start(); result = futureTask.get(); |
异步闩
// 初始化,指定开闩任务数
CountDownLatch latch = new CountDownLatch(4);
// 指派子任务完毕,关闩; 线程阻塞于此
latch.await();
// 子任务执行完毕,通知开闩
latch.countDown();