import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /** * 1 Thread 需要传入new Runnable(),则可以传入实现了Runnable接口的子接口。 FutureTask<V>实现了Runnable接口。 * Thread thread1 = new Thread(new Runnable() { * @Override * public void run() { * * } * }) * 2 FutureTask(Callable<v> callable) 构造函数;FutureTask可以传入实现了Callable接口的对象 * 3 FutureTask在 callable和 Runnable之间建立链接; * 4 Thread thread = new Thread(futureTask,"AA"): 开启线程,futureTask.get()返回Callable的结果。 * 5 futureTask.get() 如果没有运行完,则在此处阻塞。故放在最后好些。 * 6 Thread thread = new Thread(futureTask,"AA");Thread thread1 = new Thread(futureTask,"BB");call()方法仅执行一次。如果需要执行多次,多次new FutureTask<>(new MyThread()) */ public class CallableDemo { public static void main(String[] args) { // FutureTask(Callable<v> callable) 构造函数 FutureTask<Integer> futureTask = new FutureTask<>(new MyThread()); Thread thread = new Thread(futureTask,"AA"); //Thread thread1 = new Thread(futureTask,"BB"); thread.start(); int num1 = 100; try { Integer num2 = futureTask.get(); System.out.println("main 计算结果 num1+ num1 = " + (num1+ num2)); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } } class MyThread implements Callable<Integer> { @Override public Integer call() throws Exception { System.out.println("**********Callable call: come in"); Thread.sleep(5000); return 1024; } }
Callable FutureTask Thread 有返回结果的线程
最新推荐文章于 2022-07-28 11:30:17 发布