Esto es realmente extraño para mí, pero parece que notifyAll()/notify() falló en mi programa. El código es bastante complicado, básicamente tengo tres hilos A, B, CJava - notifyAll() y notify() ¿fallaron? ¿Es posible?
A envía la solicitud a B y espera() en la solicitud con un tiempo de espera de 10 segundos, cuando B finaliza, llama a notify() para despertar hasta A.
C en un deadloop alimenta muchas cadenas a A a través de una cola, A las recoge e imprime. Cada vez que A imprime una cadena, envía una solicitud a B y espera.
lo tanto, el flujo de trabajo viene a ser:
C mantiene la alimentación de una de deadloop
- Una imprime cadena de C
- A envía la solicitud a B y esperar (10)
B notify() A ......
A imprime una cadena de C .... una y otra vez ....
Esto funciona en los primeros segundos. sin embargo, después de un momento veo cuando B imprime que tiene notify() A, A todavía está esperando porque la cola que C usa para alimentar A se incrementa rápidamente, y no se imprime ninguna cadena por A. Finalmente, después de 10 segundos , A se queja del tiempo de espera de la solicitud.
Parece que notify() falló porque B imprimió un mensaje después de llamar a notify(). Teniendo en cuenta wait/notify es una característica radical de Java, no puedo creer que falle. ¿Es posible?
Are you sure * A is "still waiting"? La otra posibilidad es que * comenzó * esperando * después de * la notificación, que sería código roto. (Nunca debe esperar por algo que ya ha sucedido.) –
Quizás B haya llamado notificar ANTES de que las llamadas esperen –
queremos código por favor. – vulkanino