En el siguiente fragmento de código, declarar el método doThings() como estático haría que la clase sea segura para subprocesos. ¿Es la razón para esto que si se inician múltiples hilos de TestSeven y dado que x es una variable estática, podría ocurrir una condición de carrera?¿Por qué este código no es seguro para subprocesos?
public class TestSeven extends Thread{
private static int x;
public synchronized void doThings(){
int current = x;
current++;
x = current;
}
public void run(){
doThings();
}
public static void main(String args[]){
TestSeven t = new TestSeven();
Thread thread = new Thread(t);
thread.start();
}
}
En caso de pasar un TestSeven que es un subproceso como argumento para el constructor de subprocesos. Esto funciona porque Thread IS-A Runnable, pero no se recomienda, es mejor que haga que TestSeven implemente Runnable –