JDK5.0特性-线程 Callable和Future
来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291466.html
import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /** 从本节开始,主要介绍J2SE5.0与线程相关的新特性,新的线程类主要集中在java.util.concurrent 包中,本节实例将介绍如何使用java.util.concurrent.Callable和java.util.concurrent.Future类, 用Callable定义一个任务并启动它,然后用它的Future获取输出结果并停止它. 关键技术剖析: 关于Callable和Future类的关键技术如下: 1.Callable是类似于Runnable的接口,实现Callable接口的类和实现Runable的类都是可被其他线程 执行的任务. 2.Callable和Runnable的区别如下: 1)Callable定义的方法是call,而Runnable定义的方法是run. 2)Callable的call方法可以有返回值,而Runnable的run方法不能有返回值 3)Callable的call方法可抛出异常,而Runnable的run方法不能抛出异常 3.Future表示异步计算的结果,它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的 结果.Future的cancel方法取消任务的执行,有一个布尔参数,参数为true表示立即中断任务的执行,参数 为false表示允许正在运行的任务运行完成.Future的get方法等待计算完成,获取计算结果. */ public class CallableAndFuture { /**自定义一个任务类,实现Callable接口*/ public static class MyCallableClass implements Callable{ private int flag = 0; public MyCallableClass(int flag){ this.flag = flag; } public String call() throws Exception{ if(this.flag == 0){ return "flag = 0";//如果flag的值为0,则立即返回 } if(this.flag == 1){ //如果flag的值为1,做一个无限循环 try{ while(true){ System.out.println("looping..."); Thread.sleep(2000); } }catch(InterruptedException e){ System.out.println("Interrupted"); } return "false"; }else{ throw new Exception("Bad flag value!");//flag不为1或0,则抛出异常 } } } public static void main(String... args){ //定义3个Callable类型的任务 MyCallableClass task1 = new MyCallableClass(0); MyCallableClass task2 = new MyCallableClass(1); MyCallableClass task3 = new MyCallableClass(2); //创建一个执行任务的服务 ExecutorService es = Executors.newFixedThreadPool(3); try{ //提交并执行任务,任务启动时返回了一个Future对象 //如果想得到任务执行的结果或者是异常可对这个Future对象进行操作 Future future1 = es.submit(task1); //获得第一个任务的结果,如果调用get方法,当前线程会等待任务执行完毕后才往下执行 System.out.println("task1: " + future1.get()); Future future2 = es.submit(task2); //等待5秒后,再停止第二个任务,因为第二个任务进行的是无限循环 Thread.sleep(5000); System.out.println("task2 cancel: " + future2.cancel(true)); //获取第三个任务的输出,因为执行第三个任务会引起异常 //所以下面的语句将引起异常的输出 Future future3 = es.submit(task3); System.out.println("task3: " + future3.get()); }catch(Exception e){ System.out.println(e.toString()); } es.shutdown();//立即停止任务执行服务 } }
JDK5.0特性-线程 Callable和Future的更多相关文章
- JDK5.0 特性-线程任务执行架构 ScheduledExecutorService
来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291469.html import java.util.concurrent.Callable ...
- JDK5.0 特性-线程锁Lock
来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291470.html import java.util.concurrent.Executor ...
- JDK5.0 特性线程 同步装置之CountDownLatch 同步装置之CyclicBarrier 线程 BlockingQueue
来自:http://www.cnblogs.com/taven/category/475298.html import java.util.concurrent.CountDownLatch; imp ...
- JDK5.0 特性-线程同步装置之Semaphore
来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291474.html import java.util.ArrayList; import j ...
- JDK5.0 特性-线程 Condition
来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291471.html import java.util.concurrent.Executor ...
- JavaSE---多线程---Callable、Future
1.概述 1.1 JDK1.5后,Java提供了Callable接口,该接口提供一个call方法作为线程执行体,该call方法可以 有返回值.声明抛出异常: 因此,我们可以直接将Callable接口 ...
- JDK5.0 特性 监控与管理虚拟机
来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291465.html import java.lang.management.ClassLoa ...
- JDK5.0特性,使用ProcessBuilder执行本地命令
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.IO ...
- 集合框架-工具类-JDK5.0特性-函数可变参数
1 package cn.itcast.p4.news.demo; 2 3 public class ParamterDemo { 4 5 public static void main(String ...
随机推荐
- 【tensorflow】1.安装Tensorflow开发环境,安装Python 的IDE--PyCharm
================================================== 安装Tensorflow开发环境,安装Python 的IDE--PyCharm 1.PyCharm ...
- HTML5文件上传qq、百度、taobao等比较(改进支持三种状态提示)
拖拽过程详解: 1:文件未拖出文件选择框的时候提示:将要上传的文件或文件夹拖拽至此区域 2:文件拖出文件选择框但未拖入上传的文件框提示:请继续拖拽文件或文件夹至此区域 3:文件拖出文件选择框且已拖入上 ...
- java解压缩zip和rar的工具类
package decompress; import java.io.File; import java.io.FileOutputStream; import org.apache.tools.an ...
- java.util.Vector排序
Vector的排序: import java.util.*; class MyCompare implements Comparator //实现Comparator,定义自己的比较方法{public ...
- [Android P] Android P版本 新功能介绍和兼容性处理(一)
cp from :https://blog.csdn.net/yi_master/article/details/80046696 Android P版本已经到来,首篇我们当然要先看下Android ...
- [转]Hive安装及使用攻略
转 : http://blog.fens.me/hadoop-hive-intro/
- Http请求中Content-Type讲解以及在Spring MVC注解中produce和consumes配置详解
原文地址: https://blog.csdn.net/shinebar/article/details/54408020 引言: 在Http请求中,我们每天都在使用Content-type来指定不 ...
- ASP.NET MVC 中使用JavaScriptResult asp.net mvc 返回 JavaScript asp.mvc 后台返回js
return this.Content("<script>alert('暂无!');window.location.href='/Wap/Index';</script&g ...
- 单一职责原则(Single Responsibility Principle,SRP)
定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的 ...
- 生成Markdown目录 字符串解析 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...