A Semaphore is a thread synchronization mechanism that can be used -
- To send signals between threads
- To guard a critical section for enforcing limited access to the resource
Semaphore in java come with java 1.5 and available under package "java.util.concurrent"
Below is an example which you can go through to understand how we can enforce a limited number of thread to access a particular section of code at a time.
import java.util.concurrent.Semaphore;
public class SemaphoreExample {
Semaphore semaphore = new Semaphore(2);
private void printLock() {
try {
semaphore.acquire();
System.out.println("Lock acquired by "+Thread.currentThread().getName());
System.out.println("Locks remaining "+semaphore.availablePermits());
Thread.sleep(5000);
} catch (InterruptedException ie) {
ie.printStackTrace();
} finally {
semaphore.release();
System.out.println("Locks release "+Thread.currentThread().getName());
}
}
public static void main(String[] args) {
final SemaphoreExample semaphoreExample = new SemaphoreExample();
Runnable task = () -> semaphoreExample.printLock();
Thread t1 = new Thread(task,"t1");
Thread t2 = new Thread(task,"t1");
Thread t3 = new Thread(task,"t1");
}
}
At a time the semaphore will allow 2 thread and wait to another till it is released.
Thus you can use this to ensure the access of your costly resource by limited number of thread at once.
Comments
Post a Comment