热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

jdk5后并发线程优雅的创建方式ExecutorService+Callable比thread和runable两种方式简单和实用,可以替代后两者。...

1.前言。如题。ExecutorService可用在并发创建rar包,并发多线程执行同一任务中2.例子。publicvoidtestCall()throwsExce
1.前言。

如题。ExecutorService可用在并发创建rar包,并发多线程执行同一任务中

2.例子。


public void testCall() throws Exception{

//声明一个类,可以被调用,类似于线程,但它可以拥有返回值

class MyCall implements Callable{

private int seq;

public MyCall(int seq){

this.seq=seq;

}

//抛出异常并可以拥有返回值

public String call() throws Exception {

System.err.println("执行"+seq+","+Thread.currentThread().getName());

Thread.sleep(3000);

System.err.println("Weak up "+seq);

return "完成"+seq;//这是返回值

}

}

ExecutorService es = Executors.newCachedThreadPool();//创建线程池对象

List> result =new ArrayList>();//放结果用的集合

for(int i&#61;0;i<3;i&#43;&#43;){

Future f&#61;es.submit(new MyCall(i));//线程执行完成以后可以通过引用获取返回值

result.add(f);

}

for(Future f:result){

System.err.println("返回值&#xff1a;"&#43;f.get());//输出返回的值

}

System.err.println("完成....");

}




3.需要注意的。

(1)Executors的多线程是不分先后的&#xff0c;Callable类似Thread&#xff0c;是扩展的线程的意思&#xff0c;虚拟机上面Executors创建的线程是可以看到的。

(2)callable比run好是因为可以有返回值和抛出异常。

(3)可以减少代码量&#xff0c;同类型多线程操作不需要再用信号量来互相通知&#xff0c;操作完可以用return通知。

推荐阅读
author-avatar
爱心永溢真情永远
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有