Introduction
The java.util.concurrent
package in Java provides a range of collections and utilities designed to handle concurrent programming tasks. These classes ensure thread-safe operations, making them ideal for multi-threaded environments. In this blog, we will explore two key components: CyclicBarrier
and CopyOnWriteArrayList
.
1. CyclicBarrier
The CyclicBarrier
is a synchronization aid that allows a group of threads to wait for each other to reach a common barrier point. It is reusable and is often used in scenarios where threads need to perform tasks in phases.
Example:
import java.util.concurrent.CyclicBarrier;
public class CyclicBarrierExample {
public static void main(String[] args) {
int parties = 3;
CyclicBarrier barrier = new CyclicBarrier(parties, () ->
System.out.println("All parties have arrived. Proceeding to the next phase."));
Runnable task = () -> {
try {
System.out.println(Thread.currentThread().getName() + " is waiting at the barrier.");
barrier.await();
System.out.println(Thread.currentThread().getName() + " has crossed the barrier.");
} catch (Exception e) {
e.printStackTrace();
}
};
for (int i = 0; i < parties; i++) {
new Thread(task).start();
}
}
}
In this example, three threads wait at the barrier. Once all have arrived, they proceed to the next phase.
2. CopyOnWriteArrayList
The CopyOnWriteArrayList
is a thread-safe variant of ArrayList
. It creates a new copy of the underlying array on each write operation, making it ideal for scenarios where reads are more frequent than writes.
Example:
import java.util.concurrent.CopyOnWriteArrayList;
public class CopyOnWriteArrayListExample {
public static void main(String[] args) {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
// Reading from the list
System.out.println("Initial List: " + list);
// Modifying the list in a thread-safe way
list.add("Date");
System.out.println("Updated List: " + list);
// Iterating over the list
for (String fruit : list) {
System.out.println(fruit);
}
}
}
This demonstrates how the CopyOnWriteArrayList
allows safe modifications while iterating.
3. Other Notable Classes in java.util.concurrent
Besides CyclicBarrier
and CopyOnWriteArrayList
, the java.util.concurrent
package offers several other useful utilities:
ConcurrentHashMap
: A thread-safe implementation ofHashMap
.BlockingQueue
: Supports thread-safe producer-consumer patterns.Semaphore
: Manages access to a limited resource pool.CountDownLatch
: Allows threads to wait for a set of operations to complete.
Conclusion
The java.util.concurrent
package is a cornerstone for modern Java concurrency. Classes like CyclicBarrier
and CopyOnWriteArrayList
make it easier to write safe and efficient multi-threaded programs. By understanding and leveraging these tools, developers can build scalable and robust applications.
0 Comments