Java分布式应用学习笔记05多线程下并发同步器.doc

Java分布式应用学习笔记05多线程下并发同步器.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java分布式应用学习笔记05多线程下并发同步器

Java分布式应用学习笔记05多线程下的并发同步器 刘岩 Email:suhuanzheng7784877@163.com Blog: 前言 JDK提供的并发包,除了上一篇提到的用于集合外,还有线程的调度、协作、调度等等功能。上篇提到过,线程之间除了竞争关系,还有协作关系。在高并发环境下有效利用Java并发包解决线程之间协作的特殊场景。在并行计算,尤其是多线程计算的结果集合并的时候都需要用到这些并发同步器。还有一种使用场景,就是跨越多台机器(实机)的多线程进行并行运算,需要将多台机器进行结果集的汇总,合并。其原理核心也是使用这些并发协作包。 FutureTask FutureTask是进行并行结果集合并的类,此类是Future接口的实现。在主线程中启动多个线程进行并发计算,之后再根据各个线程的执行结果进行汇总,归并,得出一个总的结果,这个多线程可以是在一台机器上,充分利用多核CPU硬件,在科研单位可能分布式集群环境一起并发计算一个大任务,每个机器相当于一个线程,执行完毕后将反馈的结果返回来进行合并后才是最终的结果。而主线程可以等待分线程的结果,也可以不等待,全凭具体业务需要而定,不过一般情况下还是要等一等分线程的结果才能往下执行的。如果不等分线程,也可以在主线程中不再理会分线程即可。 举个实例,比如这时候东方不败要想练成《葵花宝典》,那么需要前提条件是2个,第一手中得有《葵花宝典》秘籍,第二就是挥刀自宫。恩,挥刀自宫这个主线程——东方不败可以自己完成,夺取《葵花宝典》可以派别人——兄弟童柏雄去干,2条线并行实施,等另一个人取得《葵花宝典》了,这边主线程也挥刀自宫了,行了,能练了! 咱先看代码行吧 package threadConcurrent.test; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /** * 分线程汇总 * @author liuyan */ public class FutureTaskDemo { @SuppressWarnings(unchecked) public static void main(String[] args) { // 初始化一个Callable对象和FutureTask对象 Callable otherPerson = new OtherPerson(); // 由此任务去执行 FutureTask futureTask = new FutureTask(otherPerson); // 使用futureTask创建一个线程 Thread newhread = new Thread(futureTask); System.out.println(newhread线程现在开始启动,启动时间为: + System.nanoTime() + 纳秒); newhread.start(); System.out.println(主线程——东方不败,开始执行其他任务); System.out.println(东方不败开始准备小刀,消毒...); //兄弟线程在后台的计算线程是否完成,如果未完成则等待 //阻塞 while (!futureTask.isDone()) { try { Thread.sleep(500); System.out.println(东方不败:“等兄弟回来了,我就和小弟弟告别……颤抖……”); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(newhread线程执行完毕,此时时间为 + System.nanoTime()); String result = null; try { result = (String) futureTask.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } if(OtherPerson:::经过一番厮杀取得《葵花宝典》.equals(result)){ System.out.println(兄弟,干得好,我挥刀自宫了啊!);

文档评论(0)

sy78219 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档