Los hilos deben comenzar en la misma fracción de segundo. Entiendo, si lo hace thread1.start()
, pasarán algunos milisegundos antes de la próxima ejecución de thread2.start()
.
¿Es posible o imposible?
java
multithreading
Figaro
fuente
fuente
Respuestas:
Para iniciar los subprocesos exactamente al mismo tiempo (al menos lo mejor posible), puede usar CyclicBarrier :
Esto no tiene que ser un
CyclicBarrier
, también puede usarCountDownLatch
un candado o incluso un candado.Esto todavía no puede garantizar que se inicien exactamente al mismo tiempo en las JVM estándar, pero puede acercarse bastante. Acercarse bastante sigue siendo útil cuando haces, por ejemplo, pruebas de rendimiento. Por ejemplo, si está tratando de medir el rendimiento de una estructura de datos con un número diferente de subprocesos, desea utilizar este tipo de construcción para obtener el resultado más preciso posible.
En otras plataformas, iniciar subprocesos exactamente puede ser un requisito muy válido por cierto.
fuente
CreateEvent
. msdn.microsoft.com/en-us/library/ms686364%28VS.85%29.aspxNo es posible, al menos en una computadora de un solo núcleo. Pero, ¿por qué quieres eso? Incluso si pudo iniciar dos subprocesos exactamente en el mismo segundo, progresarán de manera diferente porque la programación no está bajo su control.
Editar: (En respuesta a algunos de los comentarios) Es un requisito perfectamente válido sincronizar el estado o progreso de múltiples hilos y
CyclicBarrier
es una gran herramienta. Respondí a la pregunta de si es posible iniciar varios subprocesos exactamente al mismo tiempo .CyclicBarrier
garantizará que los subprocesos continúen cuando estén exactamente en el estado deseado, pero no garantiza que se iniciarán o reanudarán exactamente al mismo tiempo, aunque podría estar bastante cerca. No se mencionan las necesidades de sincronización en la pregunta.fuente
Podrías usar un CountDownLatch para esto. A continuación encontrará una muestra. Aunque t1 y t2 se inician, estos subprocesos siguen esperando hasta que el subproceso principal cuenta hacia atrás el pestillo. El número de cuentas atrás necesarias se menciona en el constructor. El pestillo de cuenta regresiva también se puede usar para esperar a que los subprocesos terminen de ejecutarse para que el subproceso principal pueda continuar más (el caso inverso). Esta clase se incluyó desde Java 1.5.
fuente
fuente