public class Project {
static int[] lib1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
static int[] lib2 = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
static int[] lib3 = { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 };
int book = 0;
boolean newBook = false;
// ustalanie ksiazki do wypozyczenia wywoluje czytelnik
synchronized void setBookToBorrow(int n) {
while (newBook == true) {
try {
wait();
} catch (InterruptedException exc) {
}
}
book = n;
newBook = true;
notifyAll();
}
// Metoda szukania ksiazki wywoluje bibliotekarz
synchronized int LookForBook(int[] tab) {
boolean check = false;
while (newBook == false) {
try {
wait();
} catch (InterruptedException exc) {
}
}
for (int i = 0; i < tab.length; i++) {
if (book == tab[i]) {
check = true;
}
}
if(check == true){
System.out.println("Z biblioteki wypozyczono ksiazke: " + book);
} else {
System.out.println("W bibliotece nie ma ksiazki " + book);
}
newBook = false;
notifyAll();
return book;
}
}
// Klasa bibliotekarza
class Librarian extends Thread {
Project first;
Librarian(Project f) {
first = f;
}
public void run() {
try {
sleep((int) Math.random() * 1000);
} catch (InterruptedException e) {
}
first.LookForBook(Project.lib1);
}
}
// Klasa czytelnika
class BookReader extends Thread {
Project first;
Integer[] list1 = {2,6,11};
BookReader(Project f) {
first=f;
}
public void run() {
for (int i = 0; i < list1.length; i++) {
first.setBookToBorrow(list1[i]);
}
}
}
pytanie brzmi: dlaczego watek po pierwszym poprawnym wywolaniu metody lookforbook przy kolejnym elemencie tablicy czeka. Utknalem, prosze o pomoc.