2011-10-27 9 views

Respuesta

10

El programador es, por lo general, el programador del sistema operativo. Se ve influenciado por muchos factores, incluyendo lo que están haciendo otros procesos en la máquina, qué está haciendo el hardware (interrupciones), etc. Dependiendo del sistema operativo, supongo que a veces puede haber números aleatorios, pero sospecho que generalmente no. Es más justo la forma impredecible en que los múltiples intervalos de tiempo variables pueden superponerse.

0

Dependiendo de la JVM, JVM podría transferir el hilo al SO y el programador del sistema operativo programará el hilo, o JVM puede decidir programar el hilo, por lo que la primera diferencia (comportamiento impredecible en 2 máquinas diferentes para misma situación) viene aquí, si el hilo está siendo programado por JVM u OS, no se puede estar realmente seguro ..... Además hay varios factores, la prioridad del hilo es un factor (podemos establecer la prioridad), el recurso es otro factor ... Es menos probable que haya números aleatorios involucrados.

+0

Todas las JVM principales actuales dejan la programación por completo en el sistema operativo. Algunas JVM antiguas usaban hilos verdes, pero en ese caso * la JVM administraba la programación de todos los hilos *. –

+0

@MichaelBorgwardt Supongo que el libro de SCJP para Java 6 necesita incluir esta explicación, ¡ellos no mencionarán la diferencia sobre las JVM antiguas y nuevas en el libro! de todos modos gracias por la actualización – Zohaib

4

El uso de números aleatorios en el programador introduciría sobrecarga innecesaria en una sección crítica del sistema operativo, por lo que es muy poco probable que sea la causa, al menos en cualquier sistema operativo convencional.

Un hilo generalmente se ejecuta hasta que realiza una llamada al sistema operativo que bloquearía, o hasta que ocurra una interrupción, o hasta que su intervalo de tiempo caduque (que en última instancia es solo una interrupción del temporizador). Incluso si pudieras construir cosas cuidadosamente para que dos hilos siempre se bloquearan en un orden determinista, no tienes control sobre exactamente cuándo ocurrirán los dos últimos efectos. El orden en que se ejecutan los hilos en su aplicación eventualmente será influenciado por eventos fuera de su aplicación.

0

Los sistemas operativos modernos usan lo que se conoce como Preemtive multitasking. Garantiza a cada proceso en el sistema un segmento de tiempo de CPU, con varias reglas para cuándo interrumpir cada uno y dejar que el siguiente tenga un turno. Es por eso que no necesita una CPU por proceso en su máquina :)

No es aleatorio, pero en general es impredecible.

1

Otras preguntas hacen buenos puntos con detalles técnicos, pero:

Para ser más precisos, la programación de subprocesos en Java es bastante eficiente controlado por cerraduras, espera/notificar a/notifyAll, sueño métodos y otra controles de concurrencia Solo en esos momentos durante la ejecución de la aplicación, cuando estos no están presentes, el orden de ejecución de diferentes subprocesos queda sin definir.

La razón principal es, probablemente, por la facilidad de la portabilidad de Java en diferentes sistemas de hardware/sistema operativo. También es lógico que si usted como desarrollador no define el orden en el que se deben ejecutar diferentes subprocesos en su aplicación utilizando los controles de concurrencia mencionados anteriormente, no le importa y simplemente no importa, y de manera arbitraria puede ser elegido por la JVM.

Cuestiones relacionadas