Home » Core Java » util » concurrent » Semaphore » java.util.concurrent.Semaphore Example

About Chandan Singh

Chandan Singh
Chandan holds a degree in Computer Engineering and is a passionate software programmer. He has good experience in Java/J2EE Web-Application development for Banking and E-Commerce Domains.

java.util.concurrent.Semaphore Example

In this example we shall show you how to make use of use of java.util.concurrent.Semaphore Class in Java.

1. What is a SEMAPHORE?

A semaphore in Computer Science is analogous to a Guard at the entrance of a building. However, this guard takes into account the number of people already entered into the building. At any given time, there can be only a fixed amount of people inside the building. When a person leaves the building, the guard allows a new person to enter the building. In computer science realm, this sort of guard is called a Semaphore. The concept of Semaphore was invented by Edsger Dijkstra in 1965.

The semaphores in computer science can be broadly classified as :

  • Binary Semaphore
  • Counting Semaphore

Binary Semaphore has only two states on and off(lock/unlock).(can be implemented in Java by initializing Semaphore to size 1.)
The java.util.concurrent.Semaphore Class implements a counting Semaphore.

2. Features of Semaphore Class in Java

  • The Semaphore Class constructor takes a int parameter, which represents the number of virtual permits the corresponding semaphore object will allow.
  • The semaphore has two main methods that are used to acquire() and release() locks.
  • The Semaphore Class also supports Fairness setting by the boolean fair parameter. However, the fairness leads to reduced application throughput and as such should be used sparingly.
  • The Semaphore Class also supports non-blocking methods like tryacquire() and tryacquire(int permits).

SemaphoreDemo.java:

package com.javacodegeeks.examples.concurrent;

import java.util.concurrent.Semaphore;

/**
 * @author Chandan Singh
 *This class demonstrates the use of java.util.concurrent.Semaphore Class 
 */
public class SemaphoreDemo
{
     Semaphore semaphore = new Semaphore(10);
		
     public void printLock()
     {
	try
        {
             semaphore.acquire();
	     System.out.println("Locks acquired");
	     System.out.println("Locks remaining >> " +semaphore.availablePermits());
        }
	catch(InterruptedException ie)
	{
	     ie.printStackTrace();
	}
	finally
	{
	     semaphore.release();
	     System.out.println("Locks Released");
	}	    
     }
     
     public static void main(String[] args)
     {
	    final SemaphoreDemo semaphoreDemo = new SemaphoreDemo();
	    Thread thread = new Thread(){
	    @Override
	    public void run()
	    {
	           semaphoreDemo.printLock();
	    }};
	    thread.start();
    }
}

OUTPUT:

 
Locks acquired
Locks remaining >> 9
Locks Released

3. Applications

One of the major application of Semaphore is while creation of pooled resources like Database connections.

4. Download the Source Code

Thus we have studied what semaphores are, and how we can use the same for our programmes.

Download
You can download the source code of this example here: SemaphoreDemo.zip
(No Ratings Yet)
Start the discussion Views Tweet it!

Do you want to know how to develop your skillset to become a Java Rockstar?

Subscribe to our newsletter to start Rocking right now!

To get you started we give you our best selling eBooks for FREE!

 

1. JPA Mini Book

2. JVM Troubleshooting Guide

3. JUnit Tutorial for Unit Testing

4. Java Annotations Tutorial

5. Java Interview Questions

6. Spring Interview Questions

7. Android UI Design

 

and many more ....

 

Receive Java & Developer job alerts in your Area

 

Leave a Reply

avatar
  Subscribe  
Notify of