2012-02-11 6 views

Respuesta

4

Según la Java documentation for notify():

Despierta un solo hilo que está esperando en el monitor de este objeto. Si hay hilos esperando en este objeto, uno de ellos se elige para ser despertado. La elección es arbitraria y ocurre a discreción de la implementación . Un subproceso espera en el monitor de un objeto llamando al de los métodos de espera.

tanto, si utiliza synchronized(obj){} que básicamente tienen ningún control sobre la cual hilo obtener el bloqueo en obj, y no se puede hacer ninguna suposición. Depende del planificador.

Si quiere equidad (es decir, el siguiente hilo que obtiene el candado es el primero en la cola), eche un vistazo a ReentrantLock: tiene un indicador booleano para especificar que desea aplicar equidad.

+0

Gracias. Además, parece que el bloqueo sincronizado (obj) invoca wait() también. ¿Podría describir la cadena de acciones que se realizan antes, durante y después del bloque o métodos sincronizados? – itsraja

+0

¿Qué quiere decir? El algoritmo utilizado para garantizar la exclusión mutua en una pieza de código? ¿O el algoritmo de programación? Para el primero, solo conceptualmente, es posible que desee echarle un vistazo al algoritmo de Peterson: https://en.wikipedia.org/wiki/Peterson's_algorithm. Para este último, se trata aquí: http://stackoverflow.com/questions/2816011/what-is-the-jvm-scheduling-algorithm –

+0

Gracias. Me refería a la exclusión mutua en términos de los métodos de Java. como wait(), notify() ... Estaré encantado de ver una secuencia de estas llamadas a función simuladas para 2 hilos que intentan 1 objeto. Oye, esto es análogo a 2 (o más) niños que proponen 1 niña. Lo llaman matrimonio;) – itsraja

0

Según Java Oracle Docs:

El constructor de esta clase acepta un parámetro de equidad opcional. Cuando se establece como verdadero, bajo contención, los bloqueos favorecen el acceso al hilo de espera más larga. De lo contrario, este bloqueo no garantiza ninguna orden de acceso particular.

Si permite imparcialidad, se usa FIFO (First-in-First-out), de lo contrario parece aleatorio (según mis observaciones).

+0

está asumiendo que usa ReentrantLock ... solo dijo "hilos que compiten por un bloqueo en el mismo objeto", que podría ser cualquier Objeto IMHO –

Cuestiones relacionadas