Java多线程同步问题:信号量案例展示

原创 梦里梦外; 2024-09-10 23:00 200阅读 0赞

在Java中,信号量是一种用于控制对共享资源访问的机制。以下是一个简单的信号量示例:

  1. import java.util.concurrent.Semaphore;
  2. public class SemaphoreExample {
  3. private Semaphore semaphore = new Semaphore(1); // 初始化信号量,初始值为1
  4. public void acquire() {
  5. try {
  6. semaphore.acquire(); // 请求信号量,如果数量大于0,则成功获取并进入等待状态
  7. } catch (InterruptedException e) {
  8. e.printStackTrace();
  9. }
  10. }
  11. public void release() {
  12. try {
  13. semaphore.release(); // 释放已获得的信号量,表示当前线程不再需要信号量了
  14. } catch (InterruptedException e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. public static void main(String[] args) {
  19. SemaphoreExample example = new SemaphoreExample();
  20. // 线程1:获取信号量并执行操作
  21. new Thread(() -> {
  22. example.acquire(); // 获取信号量
  23. System.out.println("Thread 1: Acquired and executing operation..."); // 执行任务
  24. example.release(); // 释放信号量
  25. })).start();
  26. // 线程2:尝试获取信号量但未成功,因此进入等待状态
  27. new Thread(() -> {
  28. example.acquire(); // 尝试获取信号量
  29. System.out.println("Thread 2: Attempted to acquire but waiting..."); // 进入等待状态
  30. })).start();
  31. }
  32. }

在这个示例中,我们创建了一个Semaphore对象,初始值为1。有两个线程分别执行acquire()和release()操作。

  • 线程1:成功获取信号量并执行任务。最后释放信号量。
  • 线程2:尝试获取信号量但未成功,因此进入等待状态。当其他线程释放信号量时,它会再次尝试获取信号量。
文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,200人围观)

还没有评论,来说两句吧...

相关阅读