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

bookChallenge: 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.
Note
Note

Please do not change anything! You only need to implement the run() method in the Worker class and also implement the logic in the use() method in the Resource class.

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?

How can we improve it?

Thanks for your feedback!

SectionΒ 3. ChapterΒ 4

Ask AI

expand

Ask AI

ChatGPT

Ask anything or try one of the suggested questions to begin our chat

Suggested prompts:

Can you explain how a semaphore works in this context?

What would the output look like when running this program?

Can you show how to implement the Resource and Worker classes?

Awesome!

Completion rate improved to 3.33

bookChallenge: Semaphore

Swipe to show menu

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.
Note
Note

Please do not change anything! You only need to implement the run() method in the Worker class and also implement the logic in the use() method in the Resource class.

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?

How can we improve it?

Thanks for your feedback!

SectionΒ 3. ChapterΒ 4
some-alt