Java多线程同步问题:互斥锁、信号量等工具的使用示例

原创 小咪咪 2024-12-05 06:12 143阅读 0赞

在Java中,我们可以使用java.util.concurrent.locks.Lock接口来实现互斥锁,以及java.util.concurrent.Semaphore来实现信号量。

以下是这两个工具的基本使用示例:

  1. 互斥锁(Lock):
    ```java
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;

class Counter {
private Lock lock = new ReentrantLock();

  1. public void increment() {
  2. lock.lock();
  3. try {
  4. count++;
  5. System.out.println("Counter incremented to " + count);
  6. } finally {
  7. lock.unlock();
  8. }
  9. }
  10. private int count = 0;

}

  1. 2. 信号量(Semaphore):
  2. ```java
  3. import java.util.concurrent.Semaphore;
  4. class CounterWithSemaphore {
  5. private Semaphore semaphore = new Semaphore(1);
  6. public void increment() {
  7. semaphore.acquire(); // 信号量的acquire方法会阻塞直到获取到信号量
  8. try {
  9. count++;
  10. System.out.println("Counter incremented to " + count);
  11. } finally {
  12. semaphore.release(); // 信号量的release方法会将信号量的数量+1
  13. }
  14. }
  15. private int count = 0;
  16. }

以上示例中,互斥锁用于确保同一时间只有一个线程可以访问共享资源,而信号量则提供了更精细的控制,比如限制同时进入的线程数量。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

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

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

相关阅读