要取到一个线程的返回值,则线程需要实现callable接口
返回值用future或futureTask来取得
public class FutureTaskTest {
public static void main(String[] args) throws InterruptedException, ExecutionException, TimeoutException {
Callable<Integer> callable = new Callable<Integer>() {
public Integer call() throws Exception {
return new Random().nextInt(100);
}
};
//第一种用法:用list来拿到返回值**********8------------------//
List<FutureTask<Integer>> futureList = new ArrayList<FutureTask<Integer>>();
//1、创建10个futureTask,将10个futureTask放到list数组中
for(int i=0; i<10; i++)
{
FutureTask<Integer> future = new FutureTask<Integer>(callable);
futureList.add(future);
}
//2、用线程池去执行这10个futureTask
//用线程池去实现
ExecutorService service = Executors.newCachedThreadPool();
for(int i=0; i<10; i++)
{
service.submit(futureList.get(i));
}
//打印返回的结果
for(FutureTask<Integer> list :futureList)
{
System.out.println("******"+list.get()+"******");
}
//****************************-----------------**//
//第二种方法:用completionService 来执行
ExecutorService service1 = Executors.newScheduledThreadPool(12);
CompletionService<Integer> cs = new ExecutorCompletionService<Integer>(service1);
for(int i=0; i<10; i++)
{
cs.submit(callable);
}
for(int i=0; i<10; i++){
System.out.println(cs.take().get());
}
//线程结束
service1.shutdown();
service.shutdown();
}
}
分享到:
相关推荐
http://blog.csdn.net/yangzhaomuma/article/details/51722779
主要介绍了Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了多线程返回值使用示例(callable与futuretask),需要的朋友可以参考下
2 如何使用FutureTask 、Future、Callable、线程池实现线程2.1 FutureTask + Callable实现多线程2.2 线程池+Future+Callable 实现多线程3 Runnable、Callable、Future和FutureTask之间的关系3.1 整体关系介绍3.2 ...
多线程机制 1 1、 Runnable接口与Thread类 1 2、 两个创建线程方法的比较 3 3、 几个常用的改变线程状态的方法 3 4、 线程的同步机制 8 ...10、 Callable结合FutureTask的多线程使用(免打扰模式) 24
Future接口是Java线程Future模式的实 现,可以来进行异步计算。 Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成这个任务。期间我自己可以去做任何想做的事情。一段时 间之后,我就便...
1、在 java 中守护线程和本地线程区别?2、线程与进程的区别?3、什么是多线程中的上下文切换?4、死锁与活锁的区别,死锁与饥饿的区别?5、Java 中用到的线程调度算法是什么?6、什么是线程组,为什么在 Java 中不...
Callable Future ExecutorService Class Thread FutureTask FutureTask 获取线程执行结果的原理:以 ThreadPoolExecutor 为例(实现 ExecutorService 接口), 其 submit() 方法提交任务, 返回 一个 FutureTask 实例...
6.3.2 携带结果的任务Callable与Future 6.3.3 示例:使用Future实现页面渲染器 6.3.4 在异构任务并行化中存在的局限 6.3.5 CompletionService:Executor与BlockingQueue 6.3.6 示例:使用CompletionService实现...
3.通过Callable和FutureTask创建线程 4.通过线程池创建线程 前面两种可以归结为一类:无返回值,原因很简单,通过重写run方法,run方式的返回值是void,所以没有办法返回结果 后面两种可以归结成一类:有返回值,...
6.3.2 携带结果的任务Callable与Future 6.3.3 示例:使用Future实现页面渲染器 6.3.4 在异构任务并行化中存在的局限 6.3.5 CompletionService:Executor与BlockingQueue 6.3.6 示例:使用CompletionService实现...
使用Callable对象实例化FutureTask类 信号量(Semaphore) 用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量 管理者一组虚拟的许可。acquire获得许可(相当于P操作),...
了解线程的状态、常用方法以及Thread、Runnable、Callable、Future、FutureTask这些基础概念和简单应用。 Java多线程②——多线程知识梳理 有助于了解线程池相关的知识、包括线程池执行逻辑、常用方法; 以及java为...
多线程相关知识 相关说明 标题:<Java进阶课程之并发编程快速入门与多线程实战项目> 课程内容: 1.CPU调度算法原理(先来先服务...3.手写Callable与FutureTask模式 两种方式 4.并发编程实战案例之手写并发队列日志框架
java.util.concurrent.Callable ; import java.util.concurrent.ExecutionException ; import java.util.concurrent.FutureTask ; /** * @Author IamZY * @create 2019/12/28 14:57 */ public class CallableDemo { ...
FutureTask JUC常用辅助类 CountDownLatch (减少计数器) CyclicBarrier(加法计数器) Semaphore(信号量,流量控制) ReentrantReadWriteLock (读写锁) BlockingQueue(阻塞队列) 线程池 池化技术 线程池的优势 ...
使用excutors的静态方法创建线程.excute(runnable实现类)/.submit(callable实现类),.shutdown() (3)线程的生命周期:创建,就绪(start),运行(获得cpu资源),阻塞 object的方法:wait(notify,notifyall)...
4、Callable、Future和FutureTask 30 5、原子操作CAS (compare atomic swap) 32 三、显式锁和AQS 34 1、AQS定义两种资源共享方式: 34 2、深入源码 37 3、了解Condition的实现 42 4、 锁的可重入 44 第三章 并发容器...
LiteGo可以直接投入Runnable、Callable、FutureTask 等类型的实现来运行一个任务,它的核心组件是「SmartExecutor」,它可以用来作为「App」内支持异步并发的唯一组件。 在一个App中「SmartExecutor」可以有多个...