callable实现多线程
线程的实现方式有三种:
1、extends Thread ,简单方便,但只能单继承,能做的事情少
2、implements Runnable ,很方便,但无法获取返回值
3、implements Callable ,可以获得返回值,返回值可自行定义
本章节介绍下callable使用
1、创建一个类,实现callable
public class MyCallable implements Callable<String> { private int a ; public MyCallable(int a){ this.a = a; } @Override public String call() throws Exception { Thread.sleep(4000); int sum = 0; for (int i = 0; i < a; i++) { sum += i; } return "线程求和:" + sum; } }
使用main去测试
public class MyMain2 { public static void main(String[] args) throws ExecutionException, InterruptedException { Callable<String> callable = new MyCallable(100); FutureTask<String> f1 = new FutureTask<>(callable); new Thread(f1).start(); String s = f1.get(); System.out.println("s = " + s); } }
1、创建任务对象
①、定义一个类实现Callable接口,重写call方法,封装要做的事情,和要返回的数据
②、把Callable类型的对象封装成FutureTask(线程任务对象)。
2、把线程任务对象交给Thread对象。
3、调用Thread对象的start方法启动线程,
4、线程执行完毕后、通过FutureTask对象的的qet方法去获取线程任务执行的结果。
实际开发中,可以返回一个对象的,只需要在implements Callable<对象>,然后在run方法return对象即可。
以上内容纯属学习~