ThreadDemo3类: package Thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class ThreadDemo3 { public static void main(String[] args) throws Exception { //掌握创建线程的第三种方式:实现Callable接口,完成线程后有返回值 //创建任务 Callable <String> th=new MyCallable(20); //FutureTask对象的作用1:是Runnable的对象(实现了Runnable接口),可以交给Thread了 // FutureTask对象的作用2:可以在线程执行完毕之后通过调用其get方法得到线程执行完成的结果 FutureTask <String> t=new FutureTask<>(th); //交给线程处理 Thread st=new Thread(t); st.start();//启动线程 //获取线程完成后的结果 System.out.println(t.get()); System.out.println("我是主线程!!"); } }
MyCallable类: import java.util.concurrent.Callable; public class MyCallable implements Callable<String> { private int n; public MyCallable(int n) { this.n = n; } //重新call方法 @Override public String call() throws Exception { int sum=0; for (int i = 0; i <n; i++) { sum+=i; } return "累加结果为:"+sum; } }