博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java线程池之FutureTask【Java线程池系列3】
阅读量:5786 次
发布时间:2019-06-18

本文共 1934 字,大约阅读时间需要 6 分钟。



Java线程池之FutureTask【Java线程池系列3】

在附录的文章2中,使用了Java的线程池和Future、Callable。本篇文章在文章2的基础上加以改进,基于FutureTask,换掉Future重新实现。

FutureTask既实现了Future,也实现了Runnable,所以更加的普适,用法和Future相类似。和附录的文章2代码写法类似,比如:

package test_java;import java.util.ArrayList;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.FutureTask;public class ZhangPhilExecutorService {	private final int POOL_SIZE = 5;	private final int TOTAL_THREAD = 6;	public ZhangPhilExecutorService() {		// 创建容量为 POOL_SIZE 的线程池。		ExecutorService pool = Executors.newFixedThreadPool(POOL_SIZE);		final ArrayList
> futures = new ArrayList
>(); for (int i = 0; i < TOTAL_THREAD; i++) { AThread t = new AThread(i); //在此处使用FutureTask实现,注意写法 FutureTask
futureTask = new FutureTask
(t); futures.add(futureTask); pool.submit(futureTask); } System.out.println("获取结果中..."); for (FutureTask
f : futures) { try { // if (f.isDone()) System.out.println(f.get()); } catch (Exception e) { e.printStackTrace(); } } System.out.println("得到全部结果."); // 关闭线程池。 pool.shutdown(); } private class AThread implements Callable
{ private int id; public AThread(int id) { this.id = id; } @Override public String call() { System.out.println("线程:" + id + " -> 运行..."); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程:" + id + " -> 结束"); return "返回的字符串" + id; } } public static void main(String[] args) { new ZhangPhilExecutorService(); }}

注意,FutureTask和Future在get返回值时候,都将阻塞,所以,为了避免阻塞,可以加一条判断语句isDone,完成了才get,否则不予get。另外,FutureTask还有Future在get的时候,还有一个相类似的方法体:

public V get(long timeout,TimeUnit unit);
可以设置超时时间,那么在get时候如果超时则返回,从另外一个途径实现非阻塞获取返回数据。

附录我以前写的相关文章:

【文章1】《Java线程池:ExecutorService,Executors》链接地址:
【文章2】《Java线程池及Future、Callable获得线程返回结果【Java线程池系列2】》链接地址:

转载地址:http://nptyx.baihongyu.com/

你可能感兴趣的文章
可视化的数据结构和算法
查看>>
瑞星2009新品正式发布 开启“云安全” 时代
查看>>
常见问题的解决方法
查看>>
约瑟夫环之数学方法【只能求最后胜利者】+ 循环链表【实现】
查看>>
第十六章 多态性
查看>>
匿名函数-------lambda
查看>>
关于《selenium2自动测试实战--基于Python语言》
查看>>
URLConnection简单使用_md
查看>>
win7 64位安装vs2013 出现'System.AccessViolationException的错误
查看>>
1077 互评成绩计算 (20 分)
查看>>
<script> 的defer和async
查看>>
五子棋算法
查看>>
详解zkw算法解决最小费用流问题
查看>>
LeetCode:14. Longest Commen Prefix(Easy)
查看>>
NSValue
查看>>
Windows平台分布式架构实践 - 负载均衡
查看>>
简单实用UML关系图解
查看>>
MAVEN学习笔记
查看>>
前端面试题十七
查看>>
HDU 2177 取(2堆)石子游戏
查看>>