Java并发编程中的锁实现:互斥锁与读写锁的区别示例

原创 桃扇骨 2024-12-10 15:33 72阅读 0赞

在Java的并发编程中,锁是一种同步机制,用于控制对共享资源的访问。常见的锁类型包括互斥锁(Synchronized Lock)和读写锁(Reentrant Read/Write Lock)。

  1. 互斥锁:
    互斥锁是典型的独占锁,即一次只有一个线程可以获取并释放锁。例如:
  1. public class Counter {
  2. private int count = 0;
  3. public synchronized void increment() {
  4. count++;
  5. }
  6. public synchronized int decrement() {
  7. if (count > 0) {
  8. count--;
  9. return count;
  10. } else {
  11. throw new IllegalArgumentException("Can't decrement count below zero");
  12. }
  13. }
  14. public synchronized int getCount() {
  15. return count;
  16. }
  17. }
  1. 读写锁:
    读写锁允许多个线程同时进行读操作,但只允许一个线程进行写操作。这样可以提高并发效率。

示例代码:

  1. import java.util.concurrent.locks.ReadWriteLock;
  2. public class RWCounter {
  3. private int count = 0;
  4. private ReadWriteLock lock = new ReentrantReadWriteLock();
  5. public synchronized void increment() {
  6. lock.readLock().acquire();
  7. try {
  8. count++;
  9. } finally {
  10. lock.readLock().release();
  11. }
  12. }
  13. public synchronized int decrement() {
  14. lock.writeLock().acquire();
  15. try {
  16. if (count > 0) {
  17. count--;
  18. return count;
  19. } else {
  20. throw new IllegalArgumentException("Can't decrement count below zero");
  21. }
  22. } finally {
  23. lock.writeLock().release();
  24. }
  25. }
  26. public synchronized int getCount() {
  27. lock.readLock().acquire();
  28. try {
  29. return count;
  30. } finally {
  31. lock.readLock().release();
  32. }
  33. }
  34. }

总结,互斥锁用于独占访问资源,而读写锁则允许对共享资源的并发读取,但一次只有一个线程可以进行写操作。

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

发表评论

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

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

相关阅读

    相关 互斥

    一、线程互斥方式。 --- 互斥锁 1、什么是互斥锁?特点怎么样? 互斥锁是专门用于处理线程之间互斥的一种方式,它有两种:上锁状态/解锁状态。 如果互斥锁处于上锁状