作家
登录
    用户名:  密码:   

Java多线程问题之同步器CyclicBarrier

作者: 来源: 2012-06-12 12:33:16 阅读11151次 我要评论

还是上次的oracle迁移到mysql的遗留问题,当我在查看数据的时候,发现两个库数据量不一致。最后证实了我的看法,我修改代码时将10个进程简成1个单线程来完成了。所以数据量会少那么多呢。

原因很简单当时就是这个函数CyclicBarrier,当时不理解具体的意思:

  1. if (sessionParameter.getSourceThreadNum() > 1) {  
  2.                 System.out.println("多线程运行");  
  3.                 CyclicBarrier barrier = new CyclicBarrier(sessionParameter  
  4.                         .getSourceThreadNum() + 2);  
  5.                 for (int i = 0; i <= sessionParameter.getSourceThreadNum(); i++) {  
  6.                     dataSyncThread dataSync = new dataSyncThread(barrier, i,  
  7.                             sDataSource, tDataSource, sessionParameter);  
  8.                     dataSync.start();  
  9.                 }  
  10.                 long start = System.currentTimeMillis();  
  11.                 barrier.await();  
  12.                 barrier.await();  
  13.                 long end = System.currentTimeMillis(); 

在实际应用中,有时候需要多个线程同时工作以完成同一件事情,而且在完成过程中,往往会等待其他线程都完成某一阶段后再执行,等所有线程都到达某一个阶段后再统一执行。 其中,的barrier就是相当于一个阻断,障碍器,CyclicBarrier最重要的属性就是参与者个数,另外最要方法是await()。当所有线程都调用了await()后,就表示这些线程都可以继续执行,否则就会等待。只有达到CyclicBarrier(int number)中number的数量,才能使程序中的10个进程同步进行互不干扰。

原文链接:http://blog.csdn.net/chen861201/article/details/7629933

【编辑推荐】

  1. JavaCore/HeapDump文件及其分析方法
  2. Java调用WMIC命令的方法阻塞
  3. Java实现双数组Trie树(DoubleArrayTrie,DAT)
  4. Java中finally关键字的使用
  5. Java内存原型分析:基本知识

  推荐阅读

  JPA的查询语言:JPQL的命名查询

JPA的命名查询实际上就是给查询语句起个名字,执行查询的时候就是直接使用起的这个名字,避免重复写JPQL语句,使查询在代码中得到更多的重用。我不怎么喜欢使用命名查询,因为我不想把查询语句写在实体中,使得实体看>>>详细阅读


本文标题:Java多线程问题之同步器CyclicBarrier

地址:http://www.17bianji.com/kaifa2/Java/148.html

24

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

11151

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)