Java并发编程举例Runnable, Callable, Future, FutureTask, CompletionService
import java.util.concurrent.*;/*** Created by chenh on 2017/3/23.*/
public class ConcurrentDemo {// 没有返回值//public interface Runnablepublic class RunnableTask implements Runnable{public void run() {System.out.println("run");}}//有返回值//public interface Callable<V>public class CallableTask implements Callable<String> {public String call() throws Exception {System.out.println("call");return "call";}}public void testRunnableTask(){ExecutorService executorService = Executors.newCachedThreadPool();//public interface Future<V>Future<?> future = executorService.submit(new RunnableTask());try {System.out.println("testRunnableTask: " + future.get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}executorService.shutdown();//new Thread(new RunnableTask()).start()}public void testCallableTask(){ExecutorService executorService = Executors.newCachedThreadPool();Future<?> future = executorService.submit(new CallableTask());try {System.out.println("testCallableTask: " + future.get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}executorService.shutdown();}public void testFutureTask1(){ExecutorService executorService = Executors.newCachedThreadPool();//public interface RunnableFuture<V> extends Runnable, Future<V>//public class FutureTask<V> implements RunnableFuture<V>FutureTask<String> futureTask = new FutureTask<String>(new RunnableTask(), "result");Future<?> future = executorService.submit(futureTask);try {System.out.println("testFutureTask: " + future.get());System.out.println("testFutureTask: " + futureTask.get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}executorService.shutdown();}public void testFutureTask2(){ExecutorService executorService = Executors.newCachedThreadPool();//public interface RunnableFuture<V> extends Runnable, Future<V>//public class FutureTask<V> implements RunnableFuture<V>FutureTask<String> futureTask = new FutureTask<String>(new CallableTask());Future<?> future = executorService.submit(futureTask);try {System.out.println("testFutureTask: " + future.get());System.out.println("testFutureTask: " + futureTask.get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}executorService.shutdown();}public class CallableTask2 implements Callable<Integer>{int id;public CallableTask2(int id){this.id = id;}public Integer call() throws Exception {return id;}}public void testCompletionService(){ExecutorService executorService = Executors.newCachedThreadPool();//public class ExecutorCompletionService<V> implements CompletionService<V>CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(executorService);for (int i=0; i<10; i++){completionService.submit(new CallableTask2(i));}for (int i=0; i<10; i++){try {System.out.println(completionService.take().get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}executorService.shutdown();}public static void main(String[] args){ConcurrentDemo demo = new ConcurrentDemo();demo.testRunnableTask();demo.testCallableTask();demo.testFutureTask1();demo.testFutureTask2();demo.testCompletionService();}
}
运行效果
run
testRunnableTask: null
call
testCallableTask: call
run
testFutureTask: null
testFutureTask: result
call
testFutureTask: null
testFutureTask: call
0
1
4
5
2
7
8
3
6
9
Java并发编程举例Runnable, Callable, Future, FutureTask, CompletionService相关推荐
- Java并发编程—说说Runnable与Callable
原文作者:每天一点 原文地址:说说Runnable与Callable 首先,我们先看看使用Callable创建线程与使用Runable的区别: import java.util.concurrent. ...
- 15、Java并发编程:Callable、Future和FutureTask
Java并发编程:Callable.Future和FutureTask 在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一 ...
- Java并发编程Future超详细教程
非原创,自己保存学习用,传播请参考原文. 原文链接:Java并发编程Future超详细教程 前言 创建线程有几种方式?这个问题的答案应该是可以脱口而出的吧 继承 Thread 类实现 Runnable ...
- 【Java并发编程】Java多线程(四):FutureTask 源码分析
前言:[Java并发编程]Java多线程(三):Runnable.Callable --创建任务的方式 在上一篇文章的末尾我们通过两个问题,引出了 FutureTask 及其设计思路,先来回顾一下: ...
- Java并发编程实战--FutureTask
FutureTask也可以用作闭锁.(FutureTask实现了Future语义,表示一种抽象的可生成结果的计算.FutureTask表示的计算是通过Callable来实现的,相当于一种可生成结果的R ...
- Java并发编程的艺术(推荐指数:☆☆☆☆☆☆)
文章目录 Java并发编程的艺术(推荐指数:☆☆☆☆☆☆) 并发编程的挑战 Java并发机制的底层实现原理 Volatile的应用 实现原理 synchronized的实现原理与应用 对象头 锁详解 ...
- Java并发编程学习 + 原理分析(建议收藏)
总结不易,如果对你有帮助,请点赞关注支持一下 微信搜索程序dunk,关注公众号,获取博客源码 Doug Lea是一个无私的人,他深知分享知识和分享苹果是不一样的,苹果会越分越少,而自己的知识并不会因为 ...
- 《Java 并发编程实战》--读书笔记
Java 并发编程实战 注: 极客时间<Java 并发编程实战>–读书笔记 GitHub:https://github.com/ByrsH/Reading-notes/blob/maste ...
- Java并发编程71道面试题及答案
Java并发编程71道面试题及答案 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方 ...
最新文章
- 各大IT公司笔试真题汇总开发人员一定要加入收藏夹的网站(收藏)
- Android TV 悬浮球模拟物理按键
- 考研数学三考摆线吗_考研数学,需要从课本开始吗?这样会不会比较慢?
- 【代码】ReentrantLock使用tryLock进行尝试锁定
- golang中的类和接口的使用
- python自动发邮件运行正常就是收不到邮件是为什么_python stmp module 163邮箱发送邮件不成功...
- DenseNet论文笔记
- 操作系统(7)-进程、线程、协程的区别
- 使用mysql命令修改配置信息
- 一个while的小小问题
- 实现IMSI、IMEI查询
- mysql limit索引变_Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架...
- 电脑前面耳机插孔没声音,后面有声音
- 网页html生成图片的常用方案
- 金属酞菁催化剂可促进氧还原反应
- linux下显卡不工作,Ubuntu 12.04下升级Nvidia后Bumblebee无法工作解决
- 这是转载的孔雀东南飞的文章
- 中国“千禧一代”是一群什么样的消费者?
- 计算机输入法在桌面显示不出来怎么办,电脑桌面上的输入法切换键没有了怎么办...
- MTK keypad调试,扩张键盘IC AW9523