我對我在編程語言類概念中學習的新概念有點難住。任何信息都會很棒。讀者作家問題如下:Java閱讀器作家
這個古典問題需要進程讀取和寫入同步。因此,在定義和創建讀寫線程之前,您需要一個同步控制器。以下是一個控制器類(剩下兩個方法供您實現)。爲了保持編程簡單,當你編寫線程類來讀寫時(比如說三個讀寫器),你只需要在讀或寫時開始象徵性地打印一條消息,並且在完成讀或寫時完成另一條消息的打印(因此沒有必要爲每個線程讀取或寫入的內容創建實際的共享內容)。
這是我的。我想我缺少一些基本的線程。請注意,除了startWriting()和stopWriting()必須由我實現之外,控制器類和方法都是給定的和必需的。謝謝。
class Controller {
private int activeReaders = 0;
private boolean writerPresent = false;
protected boolean writeCondition() {
return activeReaders == 0 && !writerPresent;
}
protected boolean readCondition() {
return !writerPresent;
}
protected synchronized void startRead() {
while (!readCondition())
try { wait(); } catch (InterruptedException ex) {}
++activeReaders;
}
protected synchronized void stopRead() {
--activeReaders;
notifyAll();
}
protected synchronized void startWriting(){
writerPresent = true;
System.out.println("Writing has begun");
}
protected synchronized void stopWriting(){
System.out.println("Reading is now available");
writerPresent = false;
}
public static void main(String [] args){
Controller c = new Controller();
Thread tRead1 = new Thread(new Runnable() {
@Override
public void run(){
c.startRead();
System.out.println("Reader 1 has started reading");
c.stopRead();
System.out.println("Reader 1 has stopped reading");
}
});
Thread tRead2 = new Thread(new Runnable() {
@Override
public void run(){
c.startRead();
System.out.println("Reader 2 has started reading");
c.stopRead();
System.out.println("Reader 2 has stopped reading");
}
});
Thread tRead3 = new Thread(new Runnable() {
@Override
public void run(){
c.startRead();
System.out.println("Reader 3 has started reading");
c.stopRead();
System.out.println("Reader 3 has stopped reading");
}
});
Thread tWrite1 = new Thread(new Runnable() {
@Override
public void run(){
c.startWriting();
c.stopWriting();
}
});
tRead1.start();
tRead2.start();
tWrite1.start();
try {
tWrite1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tRead3.start();
}
}
究竟是什麼問題? – XtremeBaumer
請澄清您的具體問題或添加其他詳細信息以突出顯示您的需要。正如目前所寫,很難確切地說出你在問什麼。 – GhostCat
Re:「我想我錯過了一些基本的東西......」你爲什麼這麼想?你的程序做了什麼,你不期望它做什麼?另外,如果您要突出顯示示例中的哪些部分是由您編寫的,以及哪些部分是在作業中提供給您的,這將會很有幫助。 –