`

Count Down Latch example code

阅读更多

Key point :

 

1) 1 task is composed of several portion.

 

2) every portion finished, the portion will call latch.countDown()

 

3) Threads depending on this task will call latch.await()

 

4) latch will be initialized using portion number, countDown() will decrese the number, when the number reaches 0, latch will release all those threads awaiting the latch open.

 

Sample code attached.

 

 

package concurrency;

 

//: concurrency/CountDownLatchDemo.java

import static java.lang.System.out;

import java.util.Random;

import java.util.concurrent.CountDownLatch;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.TimeUnit;

 

// Performs some portion of a task:

class TaskPortion implements Runnable

{

      private static int counter = 0;

      private final int id = counter++;

      private static Random rand = new Random(47);

      private final CountDownLatch latch;

 

      TaskPortion(CountDownLatch latch)

      {

            this.latch = latch;

      }

 

      public void run()

      {

            try

            {

                  doWork();

                  latch.countDown();

            }

            catch (InterruptedException ex)

            {

                  // Acceptable way to exit

            }

      }

 

      public void doWork() throws InterruptedException

      {

            TimeUnit.MILLISECONDS.sleep(rand.nextInt(2000));

            out.println(this + "completed");

      }

 

      public String toString()

      {

            return String.format("%1$-3d ", id);

      }

}

 

// Waits on the CountDownLatch:

class WaitingTask implements Runnable

{

      private static int counter = 0;

      private final int id = counter++;

      private final CountDownLatch latch;

 

      WaitingTask(CountDownLatch latch)

      {

            this.latch = latch;

      }

 

      public void run()

      {

            try

            {

                  latch.await();

                  out.println("Latch barrier passed for " + this);

            }

            catch (InterruptedException ex)

            {

                  out.println(this + " interrupted");

            }

      }

 

      public String toString()

      {

            return String.format("WaitingTask %1$-3d ", id);

      }

}

 

public class CountDownLatchDemo

{

      static final int SIZE = 100;

 

      public static void main(String[] args) throws Exception

      {

            ExecutorService exec = Executors.newCachedThreadPool();

            // All must share a single CountDownLatch object:

            CountDownLatch latch = new CountDownLatch(SIZE);

            for (int i = 0; i < 10; i++)

                  exec.execute(new WaitingTask(latch));

            for (int i = 0; i < SIZE; i++)

                  exec.execute(new TaskPortion(latch));

            out.println("Launched all tasks");

            exec.shutdown(); // Quit when all tasks complete

      }

} /* (Execute to see output) *///:~

 

 

分享到:
评论

相关推荐

    countdownlatch-example-sourcecode.zip

    在`countdownlatch-example-sourcecode.zip`这个压缩包中,我们可以看到一些关于CountDownLatch实际应用的示例代码。本文将深入探讨CountDownLatch的工作原理、使用方法以及它在并发编程中的应用场景。 1. **...

    ALL-LATCH-CODE_HomeHome_homeautomation_

    source code for 4 channel rf remote controled home automation

    latch相关内容讲解

    Latch SPIN_COUNT 参数(在Oracle 7中称为_LATCH_SPIN_COUNT)用于控制进程在等待Latch时的自旋次数。合理设置该参数可以帮助减少上下文切换开销,提高系统性能。根据系统的具体需求调整该参数是非常重要的。 总之...

    Latch up测试标准

    "Latch up测试标准" Latch up测试标准是JEDEC(Joint Electron Device Engineering Council)制定的一个工业标准,旨在确保半导体器件的可靠性和安全性。Latch up是一种电流泄露现象,当半导体器件在高温、高湿或...

    Oracle性能诊断之——Latch free

    - **调整并发控制参数**:根据实际情况调整与并发控制相关的参数,如`_spin_count`,可以优化Latch的获取策略,减少不必要的等待时间。 - **优化SQL语句和应用程序逻辑**:避免不必要的数据锁定和过度的并发访问,...

    oracle Library cache latch 竞争的解决

    SELECT COUNT(*) number_of_waiters FROM v$session_wait w, v$latch l WHERE w.wait_time = 0 -- 当前正在等待的会话 AND w.event = 'latch free' AND w.p2 = l.latch# AND l.name LIKE 'library%'; ``` 通过...

    Latch type&滞回比较器

    ### Latch Type与滞回比较器详解 #### Latch Type结构概述 在高速信号处理领域,比较器的设计至关重要。为了满足更高的速度需求,除了通过增加电路中的工作电流来提升响应速度这一传统方法之外,另一种有效手段是...

    oracle Latch free等待事件

    Oracle数据库中的"Latch Free"等待事件是数据库性能优化的一个重要概念。在深入探讨这个主题之前,我们先要理解什么是Latch和Lock,以及它们之间的区别。 Latch(锁片或轻量级锁)是一种低级别的同步机制,主要用于...

    Latch up 的原理分析

    "Latch up 的原理分析" Latch up 是一种常见的集成电路故障,发生在 CMOS 芯片中,是由于寄生PNP和NPN双极性BJT之间的相互影响而产生的一低阻抗通路。Latch up 的出现可能会使 VDD 和 GND 之间产生大电流,导致芯片...

    学习动态性能表(11)--v$latch$v$latch_children

    【学习动态性能表(11)--v$latch$v$latch_children】主要关注Oracle数据库中的动态性能视图,尤其是关于latch这一关键概念的监控和分析。latch是一种轻量级的锁定机制,用于保护SGA(System Global Area)中的共享...

    Oracle中的Latch和Lock.pdf

    Oracle数据库是一种广泛使用的大型关系型数据库管理系统,它在处理并发事务时采用了一种称为“Latch”和“Lock”的并发控制机制。Latch(闩锁)和Lock(锁定)都是Oracle用来确保数据一致性、防止数据冲突的关键组件...

    fpga中latch简介

    ### FPGA中Latch简介 #### 一、什么是Latch? 在FPGA设计中,Latch(锁存器)是一种在异步时序电路系统中使用的存储单元,它对输入信号的电平敏感,用于存储信息。通常情况下,一个锁存器能够存储1比特的信息。...

    oracle_latch

    Oracle通过一个隐含参数`_kghdsidx_count`来控制子共享池的数量。增加子共享池的数目可以提高并发性能,但同时也需要相应的内存资源。每个子共享池都有其独立的LRU(Least Recently Used)列表和Shared Pool Latch。...

    一本关于CMOS Latchup的书,内容详细

    ### CMOS Latchup详解 #### 一、引言 《关于CMOS Latchup的书》是由Steven H. Voldman所著的一本专业书籍,该书详细介绍了CMOS技术中的Latchup现象及其相关解决方案。Latchup是集成电路设计与制造过程中一个非常...

    Latch和Lock的区别

    在Oracle数据库系统中,了解和区分Latch(锁存器)和Lock(锁)是非常重要的,因为它们都是数据库并发控制的关键机制,确保数据的一致性和完整性。以下是对这两个概念的详细解释: 1. Latch(锁存器) - 目的:...

    芯片latchup原理总结

    《芯片LATCHUP原理详解及防范措施》 LATCHUP,又称闩锁效应,是集成电路设计中一个重要的问题,尤其对于CMOS工艺的芯片来说,它可能导致芯片功能失效甚至损坏。本文将深入探讨LATCHUP的产生原理以及如何有效地防止...

    Latch_Lock_And_Mutex_Contention_Troubleshooting

    标题与描述:“Latch_Lock_And_Mutex_Contention_Troubleshooting” 知识点详述: ### 1. Latch机制概述 Latch是Oracle数据库中用于管理内存结构并发访问的一种低级机制,主要用于保护短暂访问的内存结构,如缓存...

    Laravel开发-laravel-latch

    在Laravel框架中,"Laravel Latch"是一个用于处理会话、认证和授权的工具,它增强了Laravel原生的安全特性。Latch的核心概念是提供了一种更简单的方式来管理和控制用户状态,确保应用程序的数据安全性和用户体验。在...

    electrostatic discharge and latchup

    静电放电(Electrostatic Discharge,简称ESD)与闩锁效应(Latch-Up)是集成电路设计与制造中两个至关重要的问题,它们直接关系到电路的可靠性和使用寿命。以下是对这两个概念及其相互关联的深入探讨。 ### 静电...

Global site tag (gtag.js) - Google Analytics