package com.itjava.interview;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/*class MyThread implements Runnable{
@Override
public void run() {
}
}*/
//第三种线程的实现方法
class MyThread implements Callable<Integer> { //有返回值 方便多个线程之间结果的汇总
@Override
public Integer call() throws Exception { //会有异常抛出
System.out.println("*********come in Callable");
return 1024;
}
}
/**
* 多线程中,三种获得多线程的方式
*/
public class CallableDemo {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//两个线程,一个mian主线程,一个AAfutureTask
//相当于 FutureTask(Callable<V> callable)
FutureTask<Integer> futureTask = new FutureTask<>(new MyThread());
new Thread(futureTask,"AA").start();
new Thread(futureTask,"BB").start(); //如果传入的futureTask一样 ,计算结果会复用
System.out.println(Thread.currentThread().getName()+"*********");
int result01 = 100;
while (!futureTask.isDone()) {
//相当于自旋锁 等待futureTask算完出结果 ,不然一直会在等着 !
}
int result02 = futureTask.get(); //要求获得Callable线程的计算结果,如果没有计算完成就要去强求!会导致阻塞,直到计算完成
System.out.println("**********result:"+(result01+result02));
}
}