Java多线程(6)--Callable接口创建线程

这篇博客介绍了Callable接口相对于Runnable的优势,包括返回值、异常处理和泛型支持。通过FutureTask,可以在多线程环境中获取Callable任务的执行结果。示例展示了如何创建一个计算100以内偶数总和的Callable任务,并在主线程中通过FutureTask获取并输出结果。
摘要由CSDN通过智能技术生成

与使用Runnable相比, Callable功能更强大些

①相比run()方法,可以有返回值
②方法可以抛出异常
③支持泛型的返回值
④需要借助FutureTask类,可以获取返回结果


Future接口
①可以对具体Runnable、Callable任务的执行结果进行取消、查询是否完成、获取结果等
②FutrueTask是Futrue接口的唯一的实现类
③FutureTask同时实现了Runnable,Future接口,它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值


示例:输出100以内偶数,并输出其总和

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

//实现Callable接口
class NewThread implements Callable {
    private int sum;
    @Override
    public Object call() throws Exception {
        for (int i = 0; i <= 100; i++) {
            if (i % 2 == 0){
                System.out.println(i);
                sum += i;
            }
        }
        return sum;
    }
}



public class NewThreadTest {
    public static void main(String[] args) {
		//创建Callable接口实现类对象
        NewThread newThread = new NewThread();
		//创建Future接口实现类对象
        FutureTask futureTask = new FutureTask(newThread);
		//创建Thread类对象
        Thread thread = new Thread(futureTask);

        thread.start();

        try {
        	//可以通过FutureTask对象进行操作
            Object o = futureTask.get();
            System.out.println("总和为" + o);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶绿体不忘呼吸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值