Callable的简单实现

package com.itheima.callable;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class CallableTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//new Thread(new Future<V>(Callable)).start();
MyThread thread=new MyThread();
FutureTask integerFutureTask = new FutureTask(thread); //适配器
new Thread(integerFutureTask,"A").start();
new Thread(integerFutureTask,"B").start();//只输出一个call是因为其有缓存
Integer o = (Integer) integerFutureTask.get(); //获得Callable的返回值结果
System.out.println(o);
}
}
class MyThread implements Callable<Integer>{
@Override
public Integer call() throws Exception {
System.out.println("call()");
return 1024;
}
}
注意:
1.当有多个线程时,输出结果有缓存。
2.结果可能需要等待,因为get()方法耗时较长,也可能被阻塞。
本文介绍了如何使用Java的Callable接口在并发环境中创建任务,并关注了FutureTask的使用和结果缓存现象。通过实例展示了如何在MyThread类中实现Callable并启动多个线程,结果只输出一次,因为FutureTask存在线程缓存机制。
3201

被折叠的 条评论
为什么被折叠?



