Quale è meglio creare due oggetti per due thread o un oggetto per due thread?

-1

Nel programma seguente, sto chiamando method1 () di SampleClass da due thread. Quindi, in pratica ho creato due oggetti per ogni thread e chiamato il metodo1 (). Ho anche visto lo scenario di chiamare il metodo statico da due thread differenti.

Ora voglio sapere cosa succederà Se uso un solo oggetto per due thread (ho menzionato nel commento) per aver chiamato un metodo (anche il metodo statico). Ho compilato e ma non ho capito alcuna differenza.

Quindi, che è meglio, creare due oggetti per due thread o un oggetto per due thread?

public class MainClass implements Runnable{
    public void run() {    
        try{
            //SampleClass.Method1();
            SampleClass s1 = new SampleClass();
            s1.Method1();
    }
        catch(Exception e){
            e.printStackTrace();
        }
    }

    public static void main(String args[]) {
        MainClass m1 = new MainClass();
        Thread t1 = new Thread(m1);
        t1.setName("first");
        t1.start();

        MainClass m2 = new MainClass();
        Thread t2 = new Thread(m2);//Thread t2 = new Thread(m1);
        t2.setName("second");
        t2.start();
    }
}
    
posta RajeeV VenkaT 01.04.2016 - 08:13
fonte

2 risposte

0

Generalmente, i thread e i metodi statici o gli oggetti condivisi non si combinano facilmente. Esistono molte tecniche per questo (thread, code, eventi, sincronizzazione, ecc.).

L'uso della stessa istanza in due thread diversi porta a tutti i tipi di problemi, immagina entrambi i thread che scrivono nello stesso percorso di memoria (cioè un membro dell'oggetto) allo stesso tempo. Quale thread "vincerà"? Se chiami un method1 , o devi sapere esattamente come method1 funziona all'interno (il che porta ad un accoppiamento stretto) o semplicemente non puoi sapere se è sicuro o meno (a meno che il contratto di method1 non ti dica che è sicuro, nel qual caso probabilmente non faresti la domanda qui).

In generale, anche i programmatori esperti (o meglio, soprattutto) di solito rimarranno lontani dal multithreading purché umanamente possibile e lo usino solo a) se veramente necessario eb) in modi molto deliberati, cioè con schemi consolidati come il suddetto.

    
risposta data 01.04.2016 - 12:27
fonte
0

Nel contesto dell'esempio corrente, dovresti scegliere una MainClass  oggetto con due thread (considerando che è fattibile dal punto di vista dei requisiti).

Per la sincronizzazione, potrebbe essere necessario apportare modifiche in SomeClass.Method1 () a seconda dell'implementazione.

    
risposta data 01.04.2016 - 11:18
fonte

Leggi altre domande sui tag