Java-实现Callable接口创建多线程
1.实现Callable接口和实现Runnable比较
- call方法可以有返回值
- call方法可以抛出异常,被外部操作捕获异常
- callable支持泛型
2.代码举例
实现Callable接口创建多线程分为6步,第6步根据实际需求来写
package com.lmw.thread3;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
* @author
* @version 1.0.0
* @createTime 2022/5/14 20:14
* @description
*/
public class ThreadCallableTest {
public static void main(String[] args) {
//3.创建callable接口实现类的对象
Number number = new Number();
//4.将callable实现接口实现类的对象作为参数传递到FutureTask构造器中,创建FutureTask的对象
FutureTask futureTask = new FutureTask(number);
//5.将FutureTask的对象作为参数传递到Thread类的构造器中,创建Thread对象,并调用start()
new Thread(futureTask).start();
try {
// get方法的返回值即为futureTask构造器的参数Callable实现类重写的call方法的返回值
//6.获取callable中call方法的返回值
Object sum = futureTask.get();
System.out.println("总和为:" + sum);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
// 1.创建一个实现callable接口的实现类
class Number implements Callable {
// 2.实现call方法,将此线程需要执行的操作写在call方法中
@Override
public Object call() throws Exception {
int sum = 0;
for (int i = 1; i <= 100; i++) {
if(i % 2 == 0) {
sum = sum + i;
}
}
return sum;
}
}