Java多线程之读写锁——ReadWriteLock

应用说明

  • 读可以多个线程,写只能有一个线程。
  • 写写 or 读写:互斥
    读读:不互斥
  • 比普通的锁读效率高

演示

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class 读写锁 {
    public static void main(String[] args) {
        ReadWriteLockTest rwlt = new ReadWriteLockTest();

        for (int i = 0; i < 100; i++) {
            new Thread(rwlt::getNum, "R" + i).start();
        }

        new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                rwlt.setNum(i);
            }
        }, "W").start();
    }
}

class ReadWriteLockTest {
    private int num;
    ReadWriteLock rwl = new ReentrantReadWriteLock();
    Lock readLock = rwl.readLock();
    Lock wl = rwl.writeLock();

    public void getNum() {
        readLock.lock();
        try {
            System.out.println(Thread.currentThread().getName() + "  " + num);
        } finally {
            readLock.unlock();
        }
    }

    public void setNum(int num) {
        wl.lock();
        try {
            this.num = num;
        } finally {
            wl.unlock();
        }
    }
}

发布了51 篇原创文章 · 获赞 20 · 访问量 1543

猜你喜欢

转载自blog.csdn.net/qq_39711439/article/details/101672456