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相关推荐

  1. Java并发编程—说说Runnable与Callable

    原文作者:每天一点 原文地址:说说Runnable与Callable 首先,我们先看看使用Callable创建线程与使用Runable的区别: import java.util.concurrent. ...

  2. 15、Java并发编程:Callable、Future和FutureTask

    Java并发编程:Callable.Future和FutureTask 在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一 ...

  3. Java并发编程Future超详细教程

    非原创,自己保存学习用,传播请参考原文. 原文链接:Java并发编程Future超详细教程 前言 创建线程有几种方式?这个问题的答案应该是可以脱口而出的吧 继承 Thread 类实现 Runnable ...

  4. 【Java并发编程】Java多线程(四):FutureTask 源码分析

    前言:[Java并发编程]Java多线程(三):Runnable.Callable --创建任务的方式 在上一篇文章的末尾我们通过两个问题,引出了 FutureTask 及其设计思路,先来回顾一下: ...

  5. Java并发编程实战--FutureTask

    FutureTask也可以用作闭锁.(FutureTask实现了Future语义,表示一种抽象的可生成结果的计算.FutureTask表示的计算是通过Callable来实现的,相当于一种可生成结果的R ...

  6. Java并发编程的艺术(推荐指数:☆☆☆☆☆☆)

    文章目录 Java并发编程的艺术(推荐指数:☆☆☆☆☆☆) 并发编程的挑战 Java并发机制的底层实现原理 Volatile的应用 实现原理 synchronized的实现原理与应用 对象头 锁详解 ...

  7. Java并发编程学习 + 原理分析(建议收藏)

    总结不易,如果对你有帮助,请点赞关注支持一下 微信搜索程序dunk,关注公众号,获取博客源码 Doug Lea是一个无私的人,他深知分享知识和分享苹果是不一样的,苹果会越分越少,而自己的知识并不会因为 ...

  8. 《Java 并发编程实战》--读书笔记

    Java 并发编程实战 注: 极客时间<Java 并发编程实战>–读书笔记 GitHub:https://github.com/ByrsH/Reading-notes/blob/maste ...

  9. Java并发编程71道面试题及答案

    Java并发编程71道面试题及答案 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方 ...

最新文章

  1. 各大IT公司笔试真题汇总开发人员一定要加入收藏夹的网站(收藏)
  2. Android TV 悬浮球模拟物理按键
  3. 考研数学三考摆线吗_考研数学,需要从课本开始吗?这样会不会比较慢?
  4. 【代码】ReentrantLock使用tryLock进行尝试锁定
  5. golang中的类和接口的使用
  6. python自动发邮件运行正常就是收不到邮件是为什么_python stmp module 163邮箱发送邮件不成功...
  7. DenseNet论文笔记
  8. 操作系统(7)-进程、线程、协程的区别
  9. 使用mysql命令修改配置信息
  10. 一个while的小小问题
  11. 实现IMSI、IMEI查询
  12. mysql limit索引变_Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架...
  13. 电脑前面耳机插孔没声音,后面有声音
  14. 网页html生成图片的常用方案
  15. 金属酞菁催化剂可促进氧还原反应
  16. linux下显卡不工作,Ubuntu 12.04下升级Nvidia后Bumblebee无法工作解决
  17. 这是转载的孔雀东南飞的文章
  18. 中国“千禧一代”是一群什么样的消费者?
  19. 计算机输入法在桌面显示不出来怎么办,电脑桌面上的输入法切换键没有了怎么办...
  20. MTK keypad调试,扩张键盘IC AW9523

热门文章

  1. Oracle笔记(四)
  2. TCP中的Flag options
  3. 常用递归结构数据表,返会指点节点,跟其子节点的操作
  4. CodeForces - 1304D Shortest and Longest LIS(构造+贪心)
  5. 洛谷 - P1025 数的划分(dfs)
  6. 甘肃农业大学计算机基础A,2021甘肃农业大学计算机基础专业研究生考试大纲
  7. Keras-数据增广
  8. Shell脚本语言与编译型语言的差异
  9. cocos2d-x游戏开发(十三)细说回调函数
  10. 设计模式---组合模式