Domanda

Ci scusiamo per un altro esempio vaghi ... ma ho una sola classe in cui sto iniziando una nuova istanza thread. Tuttavia, se si aggiunge una nuova istanza filo, interrompe (distrugge?) Il primo.

Ma, se corro due istanze della classe (a parte, dopo che li trasformano in file jar), dove ogni istanza si apre solo un singolo thread, entrambi eseguiti simultaneamente e fine.

Sono convinto che l'errore è il modo in cui sto implementazione multi-threading.

Qualche suggerimento per cose da cercare? Grazie! Ci scusiamo per l'esempio vaga.

È stato utile?

Soluzione

Non si può dare per scontato che una classe arbitraria è thread-safe.

Gli autori di una classe dovrebbe essere espliciti circa il thread-safe delle loro classi, ma è molto comune che non lo fanno. Dato che ambienti come servlet possono essere intrinsecamente mulit-threaded questo può essere un problema reale.

Hai bisogno di studiare la classe e scoprire che, se del caso, i metodi sono thread-safe. E 'possibile che la classe ha InstanceOfClassIDontControl variabili statiche che sono sempre confusi da accesso multithread. Se non solo non controlla la classe, ma non può nemmeno vedere la sua fonte, allora si sta per bisogno del sostegno proprietari.

Altri suggerimenti

Ok, ecco un esempio:

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();
    }
}

Nell'esempio, I (ovviamente) non controllano la classe cui istanza viene creato e chiamato nel filo. Ogni thread può funzionare per minuti. Ma quando il filo è concomitante corse (in questo caso, con y.start ()), distrugge le azioni dell'oggetto chiamati nel caso run () di x.start ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top