package com.atguigu.thread;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class CallableDemo
{
public static void main(String[] args)
throws Exception
{
FutureTask<Integer> futureTask = new FutureTask<>(new MyThread2());
FutureTask<Integer> futureTask2 = new FutureTask<>(new MyThread2());
new Thread(futureTask, "AA").start();
new Thread(futureTask2, "BB").start();// 若为futureTask只执行一次,为futureTask2执行两次
// int result1 = futureTask.get(); //会阻塞后面的线程
System.out.println(Thread.currentThread().getName() + " ********");
int result2 = 100;
while (!futureTask.isDone())// 线程是否执行完毕
{}
int result1 = futureTask.get();// 建议放在最后
System.out.println("result:" + "\t" + (result1 + result2));
}
}
/**
* 带返回值的线程
*/
class MyThread2 implements Callable<Integer>
{
@Override
public Integer call()
throws Exception
{
System.out.println(Thread.currentThread().getName() + "\tcallable come in");
Thread.sleep(3000);
return 1024;
}
}
// 不带返回值的线程
class MyThread1 implements Runnable
{
@Override
public void run()
{
// TODO Auto-generated method stub
}
}