您的位置:首页 > 财经 > 产业 > Java中实现互斥的四种方式

Java中实现互斥的四种方式

2024/12/23 9:02:34 来源:https://blog.csdn.net/2301_79454048/article/details/141355188  浏览:    关键词:Java中实现互斥的四种方式

文章目录

      • 1. 使用`synchronized`关键字
        • 1.1同步方法
        • 1.2同步代码块
      • 2. 使用`ReentrantLock`
      • 3. 使用`Semaphore`
      • 4. 使用`AtomicInteger`
      • 5. 总结

在Java中,实现互斥(即确保同一时间只有一个线程可以访问共享资源)可以通过以下几种方式:

1. 使用synchronized关键字

synchronized是Java中最基本的同步机制,可以用来修饰方法或代码块。用于保证同一时间只有一个线程可以访问被锁定的方法或代码块。

1.1同步方法
public class Counter {private int count = 0;public synchronized void increment() {count++;}public synchronized int getCount() {return count;}
}
1.2同步代码块
public class Counter {private int count = 0;private final Object lock = new Object();public void increment() {synchronized (lock) {count++;}}public int getCount() {synchronized (lock) {return count;}}
}

2. 使用ReentrantLock

ReentrantLockjava.util.concurrent.locks包中的一个类,是Java提供的一种可重入的互斥锁,它提供了更灵活的锁定机制,并且可以实现更复杂的同步需求。

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class Counter {private int count = 0;private final Lock lock = new ReentrantLock();public void increment() {lock.lock();try {count++;} finally {lock.unlock();}}public int getCount() {lock.lock();try {return count;} finally {lock.unlock();}}
}

3. 使用Semaphore

Semaphore可以用来控制同时访问某一资源的线程数量。

import java.util.concurrent.Semaphore;public class Counter {private int count = 0;private final Semaphore semaphore = new Semaphore(1);public void increment() throws InterruptedException {semaphore.acquire();try {count++;} finally {semaphore.release();}}public int getCount() throws InterruptedException {semaphore.acquire();try {return count;} finally {semaphore.release();}}
}

4. 使用AtomicInteger

AtomicIntegerjava.util.concurrent.atomic包中的一个类,提供了原子操作,可以用来实现无锁的线程安全。

import java.util.concurrent.atomic.AtomicInteger;public class Counter {private AtomicInteger count = new AtomicInteger(0);public void increment() {count.incrementAndGet();}public int getCount() {return count.get();}
}

5. 总结

  • synchronized:简单易用,适用于大多数情况。
  • ReentrantLock:更灵活,支持公平锁、非公平锁、可中断锁等特性。
  • Semaphore:可以控制同时访问某一资源的线程数量。
  • AtomicInteger:无锁的线程安全操作,性能较高。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com