java多线程 Callable 的实现_JAVA_编程开发_程序员俱乐部
中国优秀的程序员网站
程序员频道
CXYCLUB技术
地图
最新资讯
|
百度新闻
|
GOOGLE地图
|
RSS订阅
|
更多
职场话题
生活休闲
恋爱交友
程序人生
学习进修
职业发展
项目管理
求职面试
程序员创业
JAVA
.NET
C/C++
Ruby
Delphi
JavaScript
PHP
ASP
JSP
HTML
XML
移动开发
开发工具
其他
编程开发
数据库
操作系统
新闻资讯
互联网
非技术区
非技术区
生活休闲
恋爱交友
职业发展
求职面试
程序人生
移动开发
开发工具
DB2
MySql
Sybase
开发
JAVA
.NET
PHP
C/C++
数据库
SQL Server
Oracle
互联网
运营
推广
营销
SEO
系统
Linux
Unix
Windows
资讯
动态
产品
人物
创业
职场
学习
管理
热搜:
异步
同步
编码
冒泡排序
下拉联动
序列化
回调机制
Maven
版本
端口扫描
Flex
Play框架
加密解密
J2EE
缓存
异步
同步
编码
冒泡排序
下拉联动
序列化
回调机制
Maven
版本
端口扫描
更多>>
您所在的位置:
程序员俱乐部
>
编程开发
>
JAVA
> java多线程 Callable 的实现
java多线程 Callable 的实现
2011/9/21 8:10:34 haya http://haya.iteye.com
我要评论(
0
)
摘要:
importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.Future;/***//***Callable和Future接口*Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务
标签:
实现
多线程
all
Java
import
?java.util.concurrent.Callable;??? ??
import
?java.util.concurrent.Executor
Service
;??? ??
import
?java.util.concurrent.Executors;??? ??
import
?java.util.concurrent.Future;??? ??
?? ??
/**?*/
/**??
?
?*?Callable?和?Future
接口
??
?
?*?Callable是类似于
Runnable
的接口,实现Callable接口的类和实现Runnable的类都是可被其它
线程
执行的任务。??
?
?*?Callable和Runnable有几点不同:??
?
?*?(1)Callable规定的方法是call(),而Runnable规定的方法是run().??
?
?*?(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。??
?
?*?(3)call()方法可抛出
异常
,而run()方法是不能抛出异常的。??
?
?*?(4)运行Callable任务可拿到一个Future对象,??
?
?*?Future?表示
异步
计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。??
?
?*?通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。??
?
?*/
?? ??
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
){??? ??
????????????????
//?如果flag的值为0,则立即返回???
??
????????????????
return
?
"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
?{??? ??
????????????????
//?falg不为0或者1,则抛出异常???
??
????????????????
throw
?
new
?Exception(
"Bad?flag?value!"
);??? ??
????????????}??? ??
????????}??? ??
????}??? ??
??????? ??
????
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?
can
cel:?"
?+?future2.cancel(
true
));??? ??
??????????????? ??
????????????
//?获取第三个任务的输出,因为执行第三个任务会引起异常???
??
????????????
//?所以下面的语句将引起异常的抛出???
??
????????????Future?future3?=?es.submit(task3);??? ??
????????????System.out.println(
"task3:?"
?+?future3.get());??? ??
????????}?
catch
?(Exception?e){??? ??
????????????System.out.println(e.toString());??? ??
????????}??? ??
????????
//?停止任务执行服务???
??
????????es.shutdownNow();??? ??
????}??? ??
}??
上一篇:
Java回调函数的理解
下一篇:
获取 未来时间段
相关文章
·
Java实现二维码QRCod
·
Java面向对象(讲义)请各
·
在HBase中应用MemSt
·
java继承中的一些 错误认
·
在CMD下对Java程序的调
·
Java 对象句柄
·
Java多线程 Web服务
·
java 位移运算与乘法运算
·
java自动拆装箱的错误使用
·
转:java内部类
查看所有评论(
0
)
我要评论
发表评论
用户名:
匿名
最新文章
J..
h..
·
后台json传递
·
Java实现二维码QRCod
·
Java面向对象(讲义)请各
·
在HBase中应用MemSt
·
java继承中的一些 错误认
·
JXL copySheet
·
在CMD下对Java程序的调
·
同步与异步--阻塞与非阻塞
·
JDBC连接各种数据库
·
Java 对象句柄
·
jna调用dll文件遇见问题
·
hadoop0.20.1在c
·
JSTL一些详细解析
·
Java多线程 Web服务
·
word,ppt,excel
最新标签
异步
同步
编码
冒泡排序
下拉联动
序列化
回调机制
Maven
版本
端口扫描
今日热点
·
全面认识Eclipse中JVM内存设置
·
struts标签实现菜单动态级联
·
JDK1.6官方下载地址
·
后台json传递
·
Java实现二维码QRCod
·
Java面向对象(讲义)请各
·
在HBase中应用MemSt
·
java继承中的一些 错误认
·
JXL copySheet
·
在CMD下对Java程序的调
推荐文章
unable ..
老..
·
The last pack
·
unable to find valid
·
老三携剑出山,Swing法力
·
java poi 创建exc
·
Errors occurre
·
[linux]ubuntu下
·
java 两数相除 四舍五入
·
Java 调用远程webservice接
·
Hadoop学习全程记录——
·
JAVA 比较两张图片的相似
·
J2EE、JAVA开源版OA发布了(JO
·
在linux下用tomcat
·
异常ognl.OgnlExc
·
Eclipse设置Tomcat启动超时时
·
org.springfra
English
|
关于我们
|
诚聘英才
|
联系我们
|
网站大事
|
友情链接
|
意见反馈
|
网站地图
Powered by
程序员俱乐部
程序提供: HugoCMS 2.0
网站备案:苏ICP备11048748号-1