How do you use Semaphore with a simple code example?

Semaphore is a synchronization aid that can be used to control access to a shared resource in concurrent programming. It maintains a set of permits that can be acquired and released by threads. Here is a simple example of how to use a Semaphore in Java.

import java.util.concurrent.Semaphore; public class SemaphoreExample { // Create a Semaphore with 1 permit private static final Semaphore semaphore = new Semaphore(1); public static void main(String[] args) { Thread thread1 = new Thread(new Task(), "Thread-1"); Thread thread2 = new Thread(new Task(), "Thread-2"); thread1.start(); thread2.start(); } static class Task implements Runnable { @Override public void run() { try { System.out.println(Thread.currentThread().getName() + " is trying to acquire the semaphore."); // Acquire the semaphore semaphore.acquire(); System.out.println(Thread.currentThread().getName() + " has acquired the semaphore."); // Simulate work by sleeping Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } finally { // Release the semaphore System.out.println(Thread.currentThread().getName() + " is releasing the semaphore."); semaphore.release(); } } } }

Semaphore Java concurrency synchronization