(android实战)线程池实现,并通过CompletionService,来实现反馈处理(转载)
来源:互联网 发布:99任务网源码 编辑:程序博客网 时间:2024/05/16 15:20
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class TestCompletionService {
public static void main(String[] args) throws InterruptedException,
ExecutionException {
ExecutorService exec = Executors.newFixedThreadPool(10);
CompletionService serv = new ExecutorCompletionService(exec);
for (int index = 0; index < 5; index++) {
final int NO = index;
Callable downImg = new Callable() {
public String call() throws Exception {
Thread.sleep((long) (Math.random() * 10000));
return "Downloaded Image " + NO;
}
};
serv.submit(downImg);
}
Thread.sleep(1000 * 2);
System.out.println("Show web content");
for (int index = 0; index < 5; index++) {
Future task = serv.take();
String img = (String)task.get();
System.out.println(img);
}
System.out.println("End");
// 关闭线程池
exec.shutdown();
}
}
考虑以下场景:浏览网页时,浏览器了5个线程下载网页中的图片文件,由于图片大小、网站访问速度等诸多因素的影响,完成图片下载的时间就会有很大的不同。如果先下载完成的图片就会被先显示到界面上,反之,后下载的图片就后显示。
Java的并发库的CompletionService可 以满足这种场景要求。该接口有两个重要方法:submit()和take()。submit用于提交一个runnable或者callable,一般会提 交给一个线程池处理;而take就是取出已经执行完毕runnable或者callable实例的Future对象,如果没有满足要求的,就等待了。 CompletionService还有一个对应的方法poll,该方法与take类似,只是不会等待,如果没有满足要求,就返回null对象。
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- (android实战)线程池实现,并通过CompletionService,来实现反馈处理(转载)
- 线程池实现,并通过CompletionService,来实现反馈处理
- (android实战)线程池实现,并通…
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
- 多线程,线程池,使用CompletionService通过Future来处理Callable的返回
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
- 【Android开发】线程与消息处理-通过实现Runnable接口来创建线程
- Android实现图文混排(2) 通过webview实现 并实现点击 图片处理事件
- 线程池原理(五):CompletionService
- CompletionService + Callable实现线程动态返回结果
- android卸载反馈实现
- android卸载反馈实现
- 对CompletionService封装,实现快速处理业务任务并汇总结果
- 通过FutureTask来实现阻塞当前线程等待其他线程处理的结果
- 通过实现Runnable接口来创建线程
- Android中通过实现线程更新ProgressDialog(对话进度条)
- flex 通过as3xls包来实现datagrid输出保存到excel。并处理中文乱码
- android 实现应用卸载反馈
- 如何在千万级别的用户中,找出积分最高的10个用户。
- SQL2008附加数据库时出错的解决办法
- 浅谈SUN JVM内存管理与应用服务器的优化 之SUN JVM内存管理
- Create another container to place the displayObject in:
- HDU 哈密顿绕行世界问题
- (android实战)线程池实现,并通过CompletionService,来实现反馈处理(转载)
- 心情随笔20130413
- Flex4 画图
- leetcode 129: Pascal's Triangle
- TheOraClusterNotes
- 2013编程之美全国挑战赛 初赛第一场 题目2
- ORACLE notes_2
- HDU Red and Black
- 关于redis存储积累