acquire():等待获取许可,如果没有名额,则等待。
release():释放许可,并且唤醒等待的线程。
读写锁
接⼝ ReadWriteLock,实现类 ReentrantReadWriteLock,可以多线程同时读,但是同⼀时间内只能有
⼀个线程写。
读写锁也是线程同步,只不过粒度更细,分别给读操作和写操作上不同的锁。
semaphore.acquire();
System.out.println(Thread.currentThread().getName()+"进店购
物");
TimeUnit.SECONDS.sleep(5);
System.out.println(Thread.currentThread().getName()+"出
店");
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
//释放许可
semaphore.release();
}
},String.valueOf(i)).start();
}
}
}
package com.southwind.demo2;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ReadWriteLockTest {
public static void main(String[] args) {
Cache cache = new Cache();
//5个线程写
for (int i = 0; i < 5; i++) {
final int temp = i;
new Thread(()->{
cache.write(temp,String.valueOf(temp));
}).start();
}
//5个线程读
for (int i = 0; i < 5; i++) {
final int temp = i;