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
?当然,如果可能的话,最好在框架中使用这个类 - 但我希望你真的写这个来更好地理解线程.
归档时间: |
|
查看次数: |
7192 次 |
最近记录: |