=========================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. Heap 3214 LIS题解

    依据问题转换成最长不降子序列问题. 10^9的输入数据计算起来还是挺花时间的.由于这里仅仅能使用O(nlgn)时间复杂度了. 只是证明是能够算出10^9个数据的. 由于时间限制是5s. #includ ...

  2. instanceof 与typeof的用法

    通常来讲,使用 instanceof 就是判断一个实例是否属于某种类型.例如: var oStringObject = new String("hello world"); con ...

  3. OZ Report 오즈 리포트 개발

    //这只单元格数据颜色 if( (int)getattr("caption") > 100) setattr("bgcolor", "$0,0, ...

  4. 点滴积累【C#】---C#实现上传word将路径保存到数据库,文件保存到服务器。并且按照名称读取服务器的word

    效果: 1. . . 数据库: 思路: 上传:先获取word物理地址,然后根据文件的类型判断,然后再保存到相应的文件夹下,再把路径插入到数据库中. 读取:首先根据输入的文件名字在数据库中查找出来文件的 ...

  5. SS不能在Win7中打开,出现停止运行

    一次,在Win7上不能打开SS,经过搜索,好像SS的win客户端使用.net frame4.6.2开发,但是Win7根本安装不了该版本的.net,所以...,重新安装Win10.

  6. Atitit.减少http请求数方案

    Atitit.减少http请求数方案 1. 原理与方法1 1.1. -------jsp1 1.2. "index/js.txt";2 1.3. connReduceDync2 1 ...

  7. maven添加额外archetype

    用Eclipse + m2e 插件新建maven项目时发现archetype太少了,网上搜索如何添加额外的archetype. http://maven.apache.org/archetype/ma ...

  8. iOS7 SDK新特性

    春风又绿加州岸.物是人非又一年.WWDC 2013 keynote落下帷幕,新的iOS开发旅程也由此开启.在iOS7界面重大变革的背后,开发人员们须要知道的又有哪些呢.同去年一样,我会先简单纵览地介绍 ...

  9. python学习之assert语句

    assert语句用于代码检测并报警. 语法 assert code... 例子 # -*- coding: utf-8 -*- # assert语句说明 a,b= 1,23 a == 2 assert ...

  10. FileStream常用的属性和方法 (转)

    对流进行操作时要引用 using System.IO; 命名空间 FileStream常用的属性和方法: 属性: CanRead 判断当前流是否支持读取,返回bool值,True表示可以读取 CanW ...