Skip to main content
Version: 2.0.x

Introduction to ZIO's Synchronization Primitives

When we access shared resources in a concurrent environment, we should choose a proper synchronization mechanism to avoid incorrect results and data inconsistencies. ZIO provides a set of synchronization primitives and concurrent data structures in the zio-concurrent module that helps us to achieve the desired synchronization.


In order to use this library, we need to add the following line in our build.sbt file:

libraryDependencies += "dev.zio" %% "zio-concurrent" % "2.x.x"


ZIO has several synchronization tools:

  • ReentrantLock— The ReentrantLock is a synchronization tool that is useful for synchronizing blocks of code.
  • CountDownLatch— The CountDownLatch is a synchronization tool that allows one or more fibers to wait for the finalization of multiple operations.
  • CyclicBarrier— The CyclicBarrier is a synchronization tool that allows a set of fibers to all wait for each other to reach a common barrier point.

Concurrent Data Structures

It also has some concurrent data structure:

  • ConcurrentMap— A ConcurrentMap is a Map wrapper over java.util.concurrent.ConcurrentHashMap
  • ConcurrentSet— A ConcurrentSet is a Set wrapper over java.util.concurrent.ConcurrentHashMap.