Fer*_*uzz 2 java concurrency readerwriterlock
这是读者作者的实现,即许多读者可以阅读但只有一个作家可以在任何时候写.这是否按预期工作?
public class ReadersWriters extends Thread{
static int num_readers = 0;
static int writing = 0;
public void read_start() throws InterruptedException {
synchronized(this.getClass()) {
while(writing == 1) wait();
num_readers++;
}
}
public void read_end() {
synchronized(this.getClass()) {
if(--num_readers == 0) notifyAll();
}
}
public void write_start() throws InterruptedException{
synchronized(this.getClass()) {
while(num_readers > 0) wait();
writing = 1;
}
}
public void write_end() {
this.getClass().notifyAll();
}
}
Run Code Online (Sandbox Code Playgroud)
此实现也与声明每个方法有任何不同
public static synchronized read_start()
Run Code Online (Sandbox Code Playgroud)
例如?
谢谢
不 - 你是隐式调用this.wait(),尽管没有同步this,而是在课堂上.同样,你要调用this.notifyAll()在read_end.我的建议:
Thread- 你根本就没有专门的线程.numReaders,readEnd(或更好endRead),等等.this如果可以提供帮助,请不要在任何一个或类上同步.我个人更喜欢有一个private final Object变量来锁定(等待等).这样您就知道只有您的代码可以在其上进行同步,这使得更容易推理.writing为0.首先使用整数而不是a的任何理由boolean?当然,如果可能的话,最好在框架中使用这个类 - 但我希望你真的写这个来更好地理解线程.