JUC-6-Callable接口
创建线程的方式
不能有返回值,且不能声明抛出异常
1. 继承Thread 类 重写Thread类的run()方法 线程不共享资源
2. 实现Runnable接口 重写Runnable接口 run()方法 线程共享资源
有返回值,且可以声明抛出异常
3. 实行Callable接口 重写call()方法
package com.wf.zhang.juc;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class TestCallabel {
public static void main(String[] args) {
ThreadDemo2 td = new ThreadDemo2();
//FutureTask用来接收Callable结果
FutureTask<Integer> futureTask = new FutureTask<Integer>(td);
//FutureTask实现了RunnableFuture接口,可以作为 Thread对象的target
new Thread(futureTask).start();
try {
Integer sum = futureTask.get(); //FutureTask 也是闭锁
System.out.println(sum);
} catch (InterruptedException | ExecutionException e) {
}
}
}
class ThreadDemo2 implements Callable<Integer> {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 0; i <= 100; i++) {
System.out.println(i);
sum += i;
}
return sum;
}
}
古人学问无遗力,少壮工夫老始成。
纸上得来终觉浅,绝知此事要躬行。