ReadWritLock基础用法
public class TestReadWritLock {
public static void main(String[] args) {
ReadWriteLock2 readWriteLock = new ReadWriteLock2();
new Thread(new Runnable() {
@Override
public void run() {
readWriteLock.setNumbers(1000);
}
},"写").start();
for (int i = 0; i < 100; i++) {
new Thread(new Runnable() {
@Override
public void run() {
readWriteLock.getNumbers();
}
}).start();
}
}
}
class ReadWriteLock2{
/*
非静态方法的锁为this 静态方法的锁为class实例
某一个时刻,只能有一个线程持有锁,不管几个方法
executors
i++操作
主内存
线程的工作内存
1.load将i的值拷贝到自己的工作内存中
2.对i的值进行加1
3.将修改后的i的值写回到主内存中
*/
private int numbers = 1;
Lock lock1 = new ReentrantLock();
Condition con = lock1.newCondition();
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
ReadWriteLock readlock = new ReentrantReadWriteLock();
ReadWriteLock lock = new ReentrantReadWriteLock();
//读读可共享 读写、写写互斥
public void getNumbers(){
readWriteLock.readLock().lock();
// System.out.println(Thread.currentThread().getName() + "读操作");
System.out.println(numbers);
readWriteLock.readLock().unlock();
}
public void setNumbers(int numbers) {
readWriteLock.writeLock().lock();
System.out.println(Thread.currentThread().getName() + "写操作");
this.numbers = numbers;
readWriteLock.writeLock().unlock();
}
}
|
|---|

被折叠的 条评论
为什么被折叠?



