Piensa la respuesta antes de abrirla. Todas las opciones parecen razonables, y casi siempre hay un detalle que lo cambia todo.
Pregunta Java · Threads
¿Cuál es el resultado de compilar y ejecutar la clase Test02?
public class Test02 {
public static void main(String argv[]) {
Test1 pm1 = new Test1("Uno");
pm1.run();
Test1 pm2 = new Test1("Dos");
pm2.run();
}
}
class Test1 extends Thread {
private String nombre = "";
Test1(String s) {
nombre = s;
}
public void run() {
for (int i = 0; i < 2; i++) {
try {
sleep(1000);
} catch (InterruptedException e) {
}
yield();
System.out.println(nombre);
}
}
}- Uno Dos
- Uno Dos Uno Dos
- Uno Uno Dos Dos
- Error de ejecución
Ver la respuesta
Respuesta: c.
java Test02 — con Thread.yield()Uno Uno Dos Dos
El código llama a run() directamente, no a start(). Así no se crea ningún hilo: run() es un método normal que se ejecuta en el hilo principal, de principio a fin, antes de pasar a la línea siguiente. Primero Uno dos veces, luego Dos dos veces, y tarda unos cuatro segundos por los cuatro sleep(1000). Con start(), los dos hilos irían a la vez y lo normal sería ver los nombres intercalados.
yield es una palabra con significado propio en las expresiones switch, y una llamada sin calificar se rechaza:javac Test02.java — Java 25Test02.java:21: error: invalid use of a restricted identifier 'yield'
yield();
^
(to invoke a method called yield, qualify the yield with a receiver or type name)
1 errorBasta con escribir Thread.yield();. Con ese cambio se obtuvo la salida de arriba. En 2014, con Java 7 u 8, el código original compilaba.
Más preguntas de Java
- El orden de un HashSet
- wait() sin el monitor correcto
- start() con un argumento
- Dos hilos y una variable compartida
- wait() fuera de synchronized
- Leer más allá del final de un archivo
- binarySearch con null
- Serializar una clase cuyo padre no es Serializable
- Clases internas anidadas
- Un assert que nunca falla
- HashSet sin equals ni hashCode
- Campos transient al serializar
Pregunta publicada en 2014 y revisada en octubre de 2026. La respuesta se comprobó compilando y ejecutando el código con Java 25 LTS en un contenedor limpio; las salidas están copiadas de esa ejecución.
c
C
c
sip es la C
c
d
c
es c
La c
es la C!!! Confirma :O
c 😀
C