ReadメソッドとWriteメソッドの2つのメソッドを持つクラスが1つあります。マルチスレッドがreadメソッドにアクセスでき、1つのスレッドだけがreadメソッドにアクセスできるようにしたい。また、writeメソッドにアクセスすると、readメソッドがブロックされます。どうすればいいですか?
注:回答を読んだ後、このための小さなコードを書いた後、同時パッケージロックを使用しました。
public class ConcurrentLock {
private Lock wLock = new Lock();
private Lock rLock = new Lock();
private int i;
public static void main(String[] args){
}
public int Read(){
try {
rLock.lock();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
rLock.unlock();
}
return i;
}
public void Write(){
try {
wLock.lock();
rLock.lock();
++i;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
wLock.unlock();
rLock.unlock();
}
}
}