dado:Haciendo un Hilo de seguridad de clase
public class TestSeven extends Thread {
private static int x;
public synchronized void doThings() {
int current = x;
current++;
x = current;
}
public void run() {
doThings();
}
}
¿Qué afirmación es verdadera?
A. La compilación falla.
B. Se produce una excepción en el tiempo de ejecución.
C. Sincronizar el método run() haría la clase segura para subprocesos.
D. Los datos en la variable "x" están protegidos contra problemas de acceso concurrente.
E. Declarar el método doThings() como estático haría que la clase fuera de subprocesos.
F. Envolver las instrucciones dentro de doThings() en un bloque sincronizado (nuevo Object()) {} haría que la clase sea segura para subprocesos.
¿no es suficiente marcar doThings() como sincronizado para hacer que la clase sea segura para subprocesos? Veo que la respuesta correcta es D pero la respuesta modelo de esta pregunta es E, pero no entiendo por qué?
D no es correcto. – Keppil
E es correcto porque no dice "eliminar la palabra clave sincronizada". Frase innecesariamente difícil, pero eso es lo que obtienes en estos exámenes. – Thilo
D es correcto, ya que con la clase dada no hay otra forma de cambiar el valor de x. Si se permite agregar otro método, entonces diría que incluso la solución E no es correcta. –