实现多线程的第三种方式(实现Callable接口)
2021-03-01 13:27
标签:ring object c 线程 rup ted tar 未来 介绍 future 之前介绍了两种实现多线程的方式:继承Thread类和实现Runnable接口。但是这两种方式的线程都不能返回一个返回值,因为run()没有返回值。 但是有时候我们委派一个线程去执行一个任务,我们希望这个线程可以返回该任务的执行结果。 JDK8中推出了一种新的实现多线程的方式:实现Callable接口,该种方式可以获取线程的返回值。 例: 结果: 程序会先等待10s再输出t及main,并且t一定再main之前输出,因为get()会产生阻塞。 实现多线程的第三种方式(实现Callable接口) 标签:ring object c 线程 rup ted tar 未来 介绍 future 原文地址:https://www.cnblogs.com/denghui-study/p/14437958.htmlpackage com.dh.callable;
import java.util.concurrent.Callable;//Callable位于JUC并发包下
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class Thread01 {
public static void main(String[] args) {
//创建一个“未来任务类”对象,参数为实现Callable的类
FutureTask futureTask = new FutureTask(new MyThread());
//将该对象做为参数创建一个线程
Thread t = new Thread(futureTask);
t.setName("t");
t.start();
//获取线程的返回值
Object o = null;
try {
o = futureTask.get();//会阻塞,并且该方法可能要执行很久,因为要等待另外一个线程的执行结果
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
System.out.println(o);
System.out.println(Thread.currentThread().getName());
}
}
class MyThread implements Callable {
//相当于run(),但是call()有返回值
@Override
public Object call() throws Exception {
Thread.sleep(1000 * 10);
return Thread.currentThread().getName();
}
}
t
main
上一篇:python快速查看内置模块函数
下一篇:守护线程和定时器
文章标题:实现多线程的第三种方式(实现Callable接口)
文章链接:http://soscw.com/index.php/essay/58574.html