Así que estoy tratando de trabajar con hilos para un juego que estoy haciendo. Soy muy nuevo para el tema, así que puede que no entienda correctamente. Mi pregunta es cómo funciona el método currentThread() en la clase Thread de la API de Java. La API dice "Devuelve una referencia al objeto de subproceso que se está ejecutando actualmente", pero por lo que yo entiendo, varios subprocesos se ejecutan al mismo tiempo. ¿Cómo es posible devolver solo un hilo de ejecución?Método del hilo actual java
Respuesta
El código que llama a currentThread
se ejecutará en uno de los hilos, no en todos ellos, por lo que puede obtener ese hilo específicamente.
Gracias eso lo hace mucho más claro. – user1427380
Cuando se ejecuta una instrucción en su código, se ejecuta dentro de un hilo específico. Este es el hilo devuelto por ese método.
Obviamente, si un método específico es ejecutado por múltiples hilos, cada ejecución puede devolver un valor diferente para Thread.currentThread()
.
Puede probar este breve ejemplo para tener una mejor idea de lo que está sucediendo y, en particular, el hecho de que los 2 hilos se ejecutan en paralelo. Debería ver que t1 funcionará con algunas bucle entonces t2 hará lo mismo y volver a t1, etc (puede que tenga que aumentar el número de bucles de un 5 a un número más alto dependiendo de la máquina):
public class TestThread {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread());
}
}
};
Thread t1 = new Thread(r, "t1");
Thread t2 = new Thread(r, "t2");
t1.start();
t2.start();
}
}
¿Por qué debería imprimir el hilo actual en un bucle? Una vez debería ser suficiente, yo pensaría. – Jeffrey
Me gustan tus primeras 2 oraciones ... pero el resto de la publicación, especialmente el código, parece lo suficientemente vago como para ser engañoso. – goat
@Jeffrey la idea era mostrar un intercalado donde un subproceso podría ejecutar el ciclo dos veces y luego el otro se activa, etc. – assylias
"El hilo que se está ejecutando actualmente" significa que el programador del sistema le dio tiempo a este hilo para ejecutar su código.
Varios subprocesos no se están ejecutando al mismo tiempo y hay un cambio de subprocesos entre varios subprocesos. El procesador puede ejecutar una tarea a la vez, por lo que se ejecuta un hilo al mismo tiempo. Entonces obtenemos la referencia del hilo que se está ejecutando actualmente.
Las máquinas multinúcleo realmente funcionan múltiples hilos a la vez. Obtuve un programa de multiproceso masivo (con subprocesos altamente interactivos) trabajando en una máquina de núcleo único, luego lo moví a una máquina con 4 núcleos. Esa fue una verdadera educación. – RalphChapin
"Varios hilos no se ejecutan_necesariamente al mismo tiempo ..." – jdv
Supongamos que tiene una lista de instrucciones impresas en una hoja de papel. Una persona lee las instrucciones y las realiza. Las instrucciones son un programa. La persona es un hilo. Podría hacer muchas copias del papel y pasarlas a muchas personas. Si las instrucciones dicen algo así como, "bótete", tú mismo se refiere a quien lee las instrucciones de ese papel. Del mismo modo, Thread.currentThread()
se refiere al hilo que está ejecutando esa llamada al currentThread()
.
Al escribir una sola aplicación con hilos, puede razonar en su programa como una serie de instrucciones, cada una ejecutada después de la anterior (esto es una aproximación aproximada, pero el compilador conceptual y el procesador intentan simular eso y funcionan como si esto era realmente lo que estaba sucediendo).
Cuando utiliza múltiples hilos, cada hilo tiene su propia serie de instrucciones. Un hilo nuevo cuando se crea pasa un punto de entrada (un método) y continuará ejecutándose desde ellos. Cada hilo es independiente del otro hilo en su ejecución (simplemente ejecutará una instrucción después de la otra), aunque comparten memoria y, por lo tanto, el efecto secundario de un hilo puede afectar a otro.
Para que se ejecute algún código, debe hacerse en el contexto de un hilo (hay uno creado por el sistema operativo cuando se inicia la aplicación, que comienza su ejecución en el método Main
). Cuando se llama a la función currentThread
, está en uno de esos contextos.
El tiempo de ejecución de java al crear un hilo almacenará una referencia a ese objeto Thread
en el contexto del hilo, y el currentThread
buscará allí y devolverá el hilo actual.
En cualquier momento dado, solo se ejecutará un subproceso (en vivo), por lo que Thread.currentThread()
devuelve los detalles del subproceso que se está ejecutando actualmente. por ejemplo, Thread_name, priority, method_name.
- 1. NDK/JNI: identificando el hilo actual
- 2. Recuperación dinámica del nombre del método actual
- 3. ¿Cómo verificar el estado del apartamento del hilo actual?
- 4. Deshabilitar reflejo de Java para el hilo actual
- 5. ¿Cómo suspender el hilo actual durante 20 segundos en java?
- 6. ¿Puedo llamar económicamente a un método de Java para obtener el nombre del método actual?
- 7. Obtener el nombre del método actual
- 8. ¿Número de hilo actual de Jmeter?
- 9. Compruebe si el hilo actual es el hilo principal
- 10. reutilización de hilo java a través del ejecutor
- 11. Detener un hilo en Java?
- 12. Invocación simultánea del método Java del objeto singleton
- 13. Seguimiento de la creación y duración del hilo Java
- 14. ¿Cómo obtener stacktrace de hilo no actual?
- 15. Exactitud del sueño del hilo
- 16. Explicación del hilo de envío de eventos Java
- 17. Actualizar textoVer del hilo
- 18. Hilo estacionado de Java
- 19. Método de ejecución en el hilo principal de otro hilo
- 20. Java: ¿volver a cambiar al hilo principal?
- 21. ¿Cómo obtener el nombre del método actual en Delphi 7?
- 22. Obteniendo el nombre del método actual en C++
- 23. Obtener el nombre del método actual que se está ejecutando
- 24. ¿Es este un buen enfoque para cambiar temporalmente la cultura del hilo actual?
- 25. ¿Debería invocarse URLForUbiquityContainerIdentifier en un hilo fuera del hilo principal?
- 26. Herramientas para supervisar la ejecución del hilo java
- 27. ¿Cuál es el hilo del despachador de señales java?
- 28. kill -3 para obtener el volcado del hilo java
- 29. ¿Cómo medir el tiempo de ejecución del hilo de Java?
- 30. Analizar una aplicación Java multi-hilo
debe leer algunos tutoriales sobre el roscado. – Sajmon
Creo que deberían haberlo llamado getSelfThread() o algo así, porque puede haber más de un hilo que se ejecuta actualmente con cpus multinúcleo. – goat