【多线程】八、异步计算结果获取

20 篇文章 0 订阅

相关文章:
【多线程】一、线程状态切换
【多线程】二、线程优先级&守护线程
【多线程】三、线程访问变量
【多线程】四、线程异常抓捕
【多线程】五、线程池
【多线程】六、锁与同步
【多线程】七、阻塞队列
【多线程】八、异步计算结果获取
【多线程】九、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():是否任务结束(自然结束或异常死亡)
FutureTaskCallable对象转换成RunnableFuture
futureTask = new FutureTask<>(callable);
new Thread(futureTask).start();
result = futureTask.get();

异步闩

// 初始化,指定开闩任务数
CountDownLatch latch = new CountDownLatch(4);

// 指派子任务完毕,关闩; 线程阻塞于此
latch.await();

// 子任务执行完毕,通知开闩
latch.countDown(); 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值