Cześć, męczę się z takim zadaniem.
//"Napisać program Author-Writer z wykładu przy użyciu blokujących kolejek.
Jako argumenty program otrzymuje napisy, które co sekundę ma generować Author.
Writer ma je wypisywać na konsoli.
Klasa Main ma następująca postać i nie można jej modyfikować."//
package zad4;
public class Main {
public static void main(String[] args) {
Author autor = new Author(args);
new Thread(autor).start();
new Thread(new Writer(autor)).start();
}
}
package zad4;
public class Writer implements Runnable {
Author TEXT_AUTHOR;
public Writer(Author ath){
TEXT_AUTHOR = ath;
}
@Override
public void run() {
String TEXT = TEXT_AUTHOR.getTextToWrite();
while(TEXT != null) {
System.out.println("-> " + TEXT);
TEXT = TEXT_AUTHOR.getTextToWrite();
}
}
}
package zad4;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Author implements Runnable {
public static String TEXT = null;
public static boolean NEW_CONTROLER = false;
Lock lock = new ReentrantLock();
String[] ARGUMENTS;
public Author(String[] args){
ARGUMENTS = args;
}
//Method setting text
public void setTextToWrite(String s) {
while (NEW_CONTROLER == true) {
try {
wait();
} catch(InterruptedException exc) {}
}
TEXT = s;
NEW_CONTROLER = true;
notifyAll();
}
//Method getting text
String getTextToWrite() {
while (NEW_CONTROLER == false) {
try {
wait();
} catch (InterruptedException e) {}
}
NEW_CONTROLER = false;
notifyAll();
return TEXT;
}
public void run() {
for(int i=0; i<ARGUMENTS.length; i++){
try {
lock.lock();
Thread.sleep(1000);
lock.unlock();
} catch (InterruptedException e) {}
setTextToWrite(ARGUMENTS[i]);
NEW_CONTROLER = false;
}
}
}
Poki co rzuca mi takie cuda
Exception in thread "Thread-1" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Unknown Source)
at zad4.Author.getTextToWrite(Author.java:42)
at zad4.Writer.run(Writer.java:19)
at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
at java.lang.Object.notifyAll(Native Method)
at zad4.Author.setTextToWrite(Author.java:35)
at zad4.Author.run(Author.java:62)
at java.lang.Thread.run(Unknown Source)
Rozwiązania nie oczekuję, ale jakiejś podpowiedzi, bo siedzę nad tym już drugi dzień :/.
Pozdrawiam