基于 Callable 实现 1+2+3+...+1000——多线程

本文介绍了如何使用Callable接口和FutureTask来简化多线程计算过程。通过对比不使用Callable的线程同步方式,展示了Callable如何避免复杂的线程同步代码,并通过FutureTask获取计算结果。同时,解释了Callable与Runnable的区别以及FutureTask的作用。
摘要由CSDN通过智能技术生成

Callable接口

Callable的用法
Callable是一个 interface .相当于把线程封装了一个 “返回值”.方便程序员借助多线程的方式计算结果.

1.创建线程计算 1 + 2 + 3 + … + 1000,不使用 Callable版本

创建一个类 Result ,包含一个 sum表示最终结果, lock表示线程同步使用的锁对象.
main方法中先创建 Result实例,然后创建一个线程 t.在线程内部计算 1 + 2 + 3 + … + 1000.
主线程同时使用 wait等待线程 t计算结束. (注意,如果执行到 wait之前,线程 t已经计算完了,就不必等待了).
当线程 t计算完毕后,通过 notify唤醒主线程,主线程再打印结果.
 

static class Result {
   public int sum = 0;
   public Object lock = new Object();
}
public static void main(String[] args) throws InterruptedException {
   Result result = new Result();
   Thread t = new Thread() {
       @Override
       public void run() {
           int sum = 0;
           for (int i = 1; i <= 1000; i++) {
               sum += i;
          }
           synchronized (result.lock) {
               result.sum = sum;
               result.lock.notify();
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值