Cyh的博客
Email:kissyan4916@163.com
posts - 26, comments - 19, trackbacks - 0, articles - 220
导航
BlogJava
首页
新随笔
联系
聚合
管理
公告
一直努力努力努力,像奴隶奴隶奴隶!~~
<
2024年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的文章
我的评论
我的参与
最新评论
随笔档案
(25)
2011年5月 (1)
2010年4月 (12)
2010年1月 (1)
2009年12月 (2)
2009年6月 (1)
2009年4月 (4)
2009年2月 (4)
文章分类
(219)
Android(26)
DB(5)
J2EE(31)
J2SE(79)
JavaScript(15)
others(47)
SOA&Web Service(1)
中间件(1)
软件工程(12)
软件架构(2)
文章档案
(220)
2011年8月 (1)
2010年12月 (23)
2010年11月 (2)
2010年8月 (5)
2010年7月 (2)
2010年6月 (2)
2010年5月 (1)
2010年4月 (12)
2010年3月 (28)
2010年2月 (5)
2010年1月 (23)
2009年12月 (39)
2009年6月 (14)
2009年5月 (31)
2009年3月 (2)
2009年2月 (29)
2009年1月 (1)
新闻档案
(66)
2010年10月 (1)
2010年9月 (5)
2010年8月 (11)
2010年7月 (21)
2010年6月 (13)
2010年5月 (8)
2010年4月 (5)
2009年11月 (2)
相册
Ryan
收藏夹
(7)
JAVA(7)
最新随笔
1. 集成FCKeditor 3.5.3
2. android自适应屏幕方向和大小
3. Android游戏开发之旅(二十) 双按事件捕获
4. Android游戏开发之旅(十八) SoundPool类
5. Android游戏开发之旅(十九) 分辨率大全
6. Android游戏开发之旅(十七) 图像渐变特效
7. Android游戏开发之旅(十六) 异步音乐播放
8. Android游戏开发之旅(十四) 游戏开发实战一
9. Android游戏开发之旅(十五) 按键中断处理
10. Android游戏开发之旅(十二)Sensor重力感应(2)
搜索
最新评论
1. re: struts2 checkboxlist标签的使用
同居同意同意
--yuk
2. re: struts2 checkboxlist标签的使用
ss
--d
3. re: JavaMail(4)--使用POP3接收邮件
邮件信息可以打印出来,可是下载邮件会出错是什么原因?
--琳喵喵0721
4. re: JavaMail(4)--使用POP3接收邮件
评论内容较长,点击标题查看
--流风
5. re: 操作PDF文件
评论内容较长,点击标题查看
--ly.wolf
阅读排行榜
1. struts2 checkboxlist标签的使用(18226)
2. struts2异常拦截器(5857)
3. struts2迭代标签(3845)
4. 用freemind 秒杀Spring Security(1914)
5. 加载顺序会影响对spring bean 的调用。(1489)
线程--Callable和Future
Posted on 2009-12-21 21:16
啥都写点
阅读(1259)
评论(0)
编辑
收藏
所属分类:
J2SE
Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其他线程执行的任务。
Callable和Runnable的区别如下:
Callable定义的方法是call,而Runnable定义的方法是run。
Callable的call方法可以有返回值,而Runnable的run方法不能有返回值。
Callable的call方法可抛出异常,而Runnable的run方法不能抛出异常。
Future表示异步计算的结果,它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。Future的cancel方法取消任务的执行,有一个布尔参数,参数为true表示立即中断任务的执行,参数为false表示允许正在运行的任务运行完成。Future的get方法等待计算完成,获取计算结果。
import
java.util.concurrent.Callable;
import
java.util.concurrent.ExecutorService;
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 cancel:
"
+
future2.cancel(
true
));
//
获取第三个任务的输出,因为执行第三个任务会引起异常
//
所以下面的语句将引起异常的抛出
Future future3
=
es.submit(task3);
System.out.println(
"
task3:
"
+
future3.get());
}
catch
(Exception e)
{
System.out.println(e.toString());
}
//
停止任务执行服务
es.shutdownNow();
}
}
--
学海无涯
Powered by:
BlogJava
Copyright © 啥都写点