Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Challenge Semaphore | High-level Synchronization Mechanisms
Multithreading in Java
course content

Course Content

Multithreading in Java

Multithreading in Java

1. Multithreading Basics
2. Synchronized Collections
3. High-level Synchronization Mechanisms
4. Multithreading Best Practices

Challenge Semaphore

Task

Imagine you have a resource that can be accessed by only two threads at a time. Your task is to create a program that uses a semaphore to control access to this resource.

Conditions:

  1. You have a Resource class with a use() method that simulates the use of a resource, such as printing a message and introducing a delay;
  2. You have a Worker class that implements Runnable; in its run() method, it will attempt to access the resource using a semaphore;
  3. In the SemaphoreExample class, you have a main() method that initializes a semaphore with permits for two threads, along with multiple worker threads that will attempt to access the resource;
  4. Ensure that no more than two threads can use the resource at any given time.

How should the program work?

You have 5 threads that want to execute the use() method simultaneously, but with a Semaphore, you need to limit the simultaneous execution to 2 threads. As soon as a thread releases the Semaphore, another thread can begin executing this method. For better clarity in this scenario, it’s recommended to introduce a delay within the use() method.

Everything was clear?

Section 3. Chapter 4
We're sorry to hear that something went wrong. What happened?
some-alt