Так что я работал над простым примером wait/notify в Java и по какой-то причине я не смог заставить его работать должным образом. Если кто-то может понять, что может быть проблемой, это было бы очень признательно!notify() и notifyAll() не работает в моем Java-коде
class producer implements Runnable {
StringBuffer sb;
producer() {
sb=new StringBuffer("");
}
public void run() {
synchronized(sb) {
for(int i = 0; i < 10; i++) {
try {
sb.append(i+" ");
System.out.println("Appending ... ");
} catch (Exception e) {}
}
sb.notify();
}
}
}
class consumer implements Runnable {
producer p;
consumer(producer pp) {
this.p = pp;
}
public void run() {
System.out.println("Rreached");
synchronized(p.sb) {
try {
p.sb.wait();
} catch (Exception e) {}
System.out.println(p.sb);
}
}
}
class Thread_Comunication {
public static void main (String [] args) {
producer p = new producer();
consumer c = new consumer(p);
Thread t1 = new Thread(p);
Thread t2 = new Thread(c);
t1.start();
t2.start();
}
}
Выход:
Appending ...
Rreached // randome Position
Appending ...
Appending ...
Appending ...
Appending ...
Appending ...
Appending ...
Appending ...
Appending ...
Appending ...
Так почему нить t1
не разбудить t2
или я что-то отсутствует совсем другое?
По крайней мере, положить 'e.printStackTrace();' в 'catch' блоков иначе вы никогда не будете знать, если произошло исключение. – Jesper
Примечание. Соглашения о языке Java - это то, что имена классов начинаются с имени имени (таким образом, 'производитель 'не является хорошим именем класса). Символы не используются в именах классов, методах или пакетах, только в именах констант, которые являются полностью-капитальными. Классы имеют имена типа «ThreadCommunication», а не «Tread_Comunication». Также рекомендуется указывать переменные значимые имена, а не «p» и «pp». – RealSkeptic
Закрытый избиратель: опубликованный код воспроизводит проблему (по крайней мере, насколько это возможно, поскольку код зависит от состояния гонки, которое может или не может возникнуть по усмотрению планировщика). Между опубликованным кодом и показанным выходом полезно понять, что здесь происходит. –