=========================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. delete与delete [] 真正差别

    我们通常从教科书上看到这种说明: delete 释放new分配的单个对象指针指向的内存 delete[] 释放new分配的对象数组指针指向的内存 那么,依照教科书的理解,我们看下以下的代码: int ...

  2. 自定义 XIB subview的时候 为什么控件都是 空的

    http://blog.wtlucky.com/blog/2014/08/10/nested-xib-views/

  3. CentOS6.6+Puppet3.7.4分布式部署Nagios监控系统

    测试框架 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 CentOS-6.6-x86_64(minimal)   puppet-3.7 ...

  4. 点滴积累【JS】---JS小功能(onmouseover实现选择月份)

    效果: 代码: <head runat="server"> <title></title> <style type="text/ ...

  5. 点滴积累【JS】---JS小功能(button选择颜色)

    效果: 代码: <head runat="server"> <title></title> <style type="text/ ...

  6. spring的容器(控制反转、依赖注入)

    一.spring的容器 ”容器“是spring的一个重要概念,其主要作用是完成创建成员变量,并完成装配. 而容器的特点”控制反转“和”依赖注入“是两个相辅相成的概念. 控制反转:我们在使用一个类型的实 ...

  7. jQuery插件学习笔记

    近期在研究jQuery插件,插件编写的目的是给已经有的一系列方法或函数做一个封装,以便在其它地方反复使用,方便后期维护. JQuery除了提供一个简单.有效的方式进行管理元素以及脚本,它还还提供了例外 ...

  8. java文件对话框操作

        完毕文件打开与保存   FileDialog : FileDialog fd = new FileDialog(this); fd.setVisible(true);//或fd.show(); ...

  9. 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderList

    最近在用idea部署war文件的时候,总是出现了部署失败的错误,刚开始并没有在意,但是现在次数越来越多了,不得不在意了,然后就在百度上搜,然后就有了各种说法 1,错误的信息是: One or more ...

  10. Android插件化开发之OpenAtlas生成插件信息列表

    上一篇文章.[Android插件化开发之Atlas初体验]( http://blog.csdn.net/sbsujjbcy/article/details/47446733),简单的介绍了使用Atla ...