=========================one=============================

public class Bingfa {

public static void main(String[] args) throws InterruptedException {            
        // 锁住所有线程,等待并发执行  
        final CountDownLatch begin = new CountDownLatch(1);      
        final ExecutorService exec = Executors.newFixedThreadPool(10);    
 
        for (int index = 0; index < 100; index++)   
        {  
            final int NO = index + 1;                 
            Runnable run = new Runnable()   
            {  
                public void run() {    
                    try {    
                        // 等待,所有一起执行  
                        begin.await();  
                        //*****执行程序去********//

          ????????????

//*****执行程序去********//
                    } catch (InterruptedException e)   
                    {    
                        e.printStackTrace();  
                    }   
                    finally {    
                    }    
                }    
            };    
            exec.submit(run);  
        }    
          
        System.out.println("开始执行");    
        // begin减一,开始并发执行  
        begin.countDown();              
        //关闭执行  
        exec.shutdown();    
    }
}

==========================two==================================

public class CountdownLatchTest {  
 
    public static void main(String[] args) {  
        ExecutorService service = Executors.newCachedThreadPool(); //创建一个线程池  
        final CountDownLatch cdOrder = new CountDownLatch(1);//构造方法参数指定计数的次数 
        final CountDownLatch cdAnswer = new CountDownLatch(3);//构造方法参数指定计数的次数 
        for(int i=0;i<3;i++){  
            Runnable runnable = new Runnable(){  
                public void run(){  
                    try {  
                        System.out.println("线程" + Thread.currentThread().getName() +  
                                "正准备接受命令");  
                        cdOrder.await(); //战士们都处于等待命令状态  
                        System.out.println("线程" + Thread.currentThread().getName() +  
                                "已接受命令");  
                        Thread.sleep((long)(Math.random()*10000));  
                        System.out.println("线程" + Thread.currentThread().getName() +  
                                "回应命令处理结果");  
 
                    } catch (Exception e) {  
                        e.printStackTrace();  
                    } finally {  
                        cdAnswer.countDown(); //任务执行完毕,返回给指挥官,cdAnswer减1。  
                    }  
                }  
            };  
            service.execute(runnable);//为线程池添加任务  
        }  
        try {  
            Thread.sleep((long)(Math.random()*10000));  
 
            System.out.println("线程" + Thread.currentThread().getName() +  
                    "即将发布命令");  
            cdOrder.countDown(); //发送命令,cdOrder减1,处于等待的战士们停止等待转去执行任务。  
            System.out.println("线程" + Thread.currentThread().getName() +  
                    "已发送命令,正在等待结果");  
            cdAnswer.await(); //命令发送后指挥官处于等待状态,一旦cdAnswer为0时停止等待继续往下执行  
            System.out.println("线程" + Thread.currentThread().getName() +  
                    "已收到所有响应结果");  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
        }  
        service.shutdown(); //任务结束,停止线程池的所有线程  
    }  
}

转载:http://blog.csdn.net/zhao9tian/article/details/40346899

Java模拟并发的更多相关文章

  1. 【实战Java高并发程序设计 5】让普通变量也享受原子操作

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  2. 【实战Java高并发程序设计 3】带有时间戳的对象引用:AtomicStampedReference

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference AtomicReference无法解决上述问题的根 ...

  3. Java模拟登录系统抓取内容【转载】

    没有看考勤的习惯,导致我的一天班白上了,都是钱啊,系统也不发个邮件通知下....     为了避免以后还有类似状况特别写了个java模拟登录抓取考勤内容的方法(部分代码来自网络),希望有人修改后也可以 ...

  4. 《实战java高并发程序设计》源码整理及读书笔记

    日常啰嗦 不要被标题吓到,虽然书籍是<实战java高并发程序设计>,但是这篇文章不会讲高并发.线程安全.锁啊这些比较恼人的知识点,甚至都不会谈相关的技术,只是写一写本人的一点读书感受,顺便 ...

  5. Java高并发如何解决

    Java高并发如何解决 对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题,但话又说回来了,既然逃避不掉,那我们就坦然面对吧 ...

  6. 转载:Java高并发,如何解决,什么方式解决

    原文:https://www.cnblogs.com/lr393993507/p/5909804.html 对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并 ...

  7. 【转】Java高并发,如何解决,什么方式解决

    原文地址:https://www.cnblogs.com/lr393993507/p/5909804.html 对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了. ...

  8. java中并发Queue种类与各自API特点以及使用场景!

    一 先说下队列 队列是一种数据结构.它有两个基本操作:在队列尾部加入一个元素,和从队列头部移除一个元素(注意不要弄混队列的头部和尾部) 就是说,队列以一种先进先出的方式管理数据,如果你试图向一个 已经 ...

  9. Java 多线程并发编程一览笔录

    Java 多线程并发编程一览笔录 知识体系图: 1.线程是什么? 线程是进程中独立运行的子任务. 2.创建线程的方式 方式一:将类声明为 Thread 的子类.该子类应重写 Thread 类的 run ...

随机推荐

  1. git教程,切换分支并拉去

    进了目录切换分支: git checkout 5.1 切换完成后拉去分支为: git pull https://www.liaoxuefeng.com/wiki/0013739516305929606 ...

  2. Phone

    User-Agent Switcher for Chrome EditThisCookie cornerstone SVN

  3. Atitit.异常的设计原理与 策略处理 java 最佳实践 p93

    Atitit.异常的设计原理与 策略处理 java 最佳实践 p93 1 异常方面的使用准则,答案是:: 2 1.1 普通项目优先使用异常取代返回值,如果开发类库方面的项目,最好异常机制与返回值都提供 ...

  4. dedecms使用

    使用到了dedecms内容管理系统,遇到两个问题: 1.点击登录后,没有登录进去也没有任何提示,一片空白 解决办法:我是把网站从云主机拷贝下来的,但是忘了云主机上的数据库密码和自己本地的数据库密码不一 ...

  5. CentOS6.2下Qt5.1.0无法输入中文

    因为在程序中需要在界面上输入中文,但是系统是英文系统,没有预装中文输入法,于是从网上搜了一下输入法的安装,但是输入法安装好之后,可以再系统中输入中文,但是却无法再Qt中输入中文,只能继续找解决办法 安 ...

  6. LeetCode 145 Binary Tree Postorder Traversal(二叉树的兴许遍历)+(二叉树、迭代)

    翻译 给定一个二叉树.返回其兴许遍历的节点的值. 比如: 给定二叉树为 {1. #, 2, 3} 1 \ 2 / 3 返回 [3, 2, 1] 备注:用递归是微不足道的,你能够用迭代来完毕它吗? 原文 ...

  7. windows7 mongodb 安装急遇到的问题

    偶尔上一次博客园,才发现自己这么久没有写东西了.今天更新一篇. 作为前端开发者,node.js 无非是一个强心剂.有了node.js 后端开发变得不需要再搞另一门语言,一个javascript 就能搞 ...

  8. Uploadify使用源码

    上传图片页面绑定源码如下: $("#uploadify").uploadify({ 'uploader' : basePath+'commons/uploadfiles/uploa ...

  9. 小程序WXML 使用小结

    数据绑定 <view> {{message}} </view> // page.js Page({ data: { message: 'Hello MINA!' } }) 组件 ...

  10. select 自定义样式插件 selectize.js

    [特别推荐]几款极好的 JavaScript 下拉列表插件   表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让 ...