Pregunta

Lo siento por otro ejemplo vaga ... pero tengo una sola clase en la que estoy empezando una nueva instancia hilo. Sin embargo, si añado una nueva instancia de rosca, se interrumpe (destruye?) La primera.

Pero, si me quedo dos instancias de la clase (por separado, después de que los convierten en archivos JAR), donde cada instancia solamente se abre un solo hilo, ambos se ejecutan simultáneamente y fino.

Estoy convencido de que el error es la forma en que estoy implementación multi-threading.

¿Alguna sugerencia para cosas a tener en cuenta? ¡Gracias! Lo sentimos para el ejemplo vaga.

¿Fue útil?

Solución

No se puede asumir que una clase arbitraria es seguro para subprocesos.

Los autores de una clase deben ser explícito sobre el hilo de seguridad de sus clases, pero es muy común que no lo hacen. Dado que los entornos tales como Servlets pueden ser intrínsecamente mulit-roscado esto puede ser un problema real.

Es necesario estudiar la clase y descubrir lo que, en su caso, los métodos son seguros para subprocesos. Es posible que la clase tiene InstanceOfClassIDontControl variables estáticas que se están confundidos por el acceso multiproceso. Si no sólo no controlan la clase, pero no puede ni siquiera ver su fuente, entonces van a necesitar el apoyo de los propietarios.

Otros consejos

Ok, aquí está un ejemplo:

public class driver {

    public static void main(String args[])
    {
        Thread x;
        Thread y;

        x = new Thread(new pow());
        y = new Thread(new pow());

        x.start();
        y.start();  
    }
}

public class pow extends Thread {

    public void run() {
        InstanceOfClassIDontControl a = new InstanceOfClassIDontControl();
                a.doVariousProcesses();
    }
}

En el ejemplo, I (obviamente) no controlan la clase cuya instancia se crea y se llama en el hilo. Cada hilo puede ejecutar por minuto. Pero cada vez que un hilo se corrió concurrente (en este caso, con y.start ()), que destruye las acciones del objeto llamado en el caso run () de x.start ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top