Volevo sapere se le mie risposte dopo aver studiato i thread siano giuste...Grazie mille a chiunque mi risponda
Siano dati due oggetti, a e b, della classe A, due thread, th1 e th2, che eseguono i metodi di a, e un thread th3 che esegue i metodi di b.codice:class A { public synchronized void m1() { istr1; } public void m2() { istr2; synchronized(this){ istr3;} } }
Spiegare se è possibile che:
(a) th1 e th2 eseguano contemporaneamente l’istruzione istr1?
No perchè l'istruzione una che si trova nel metodo m1() è sincronizzato quindi viene svolto da un thread alla volta.
(b) th1 e th2 eseguano contemporaneamente l’istruzione istr2?
Sì perchè istr2 si trova nel metodo m2() e non è sincronizzato
(c) th1 e th3 eseguano contemporaneamente l’istruzione istr3?
Sì perchè sono due oggetti distinti uno della classe A l'altro della classe B quindi i due thread non interferiscono tra di loro
(d) th1 e th2 eseguano contemporaneamente uno l’istruzione istr1 e l’altro l’istruzione istr2?
Sì perchè l'istruzione istr2 non è sincronizzata
(e) th1 e th2 eseguano contemporaneamente uno l’istruzione istr1 e l’altro l’istruzione istr3?
No perchè th1 sta eseguendo un metodo sincronizzato essendo che fanno riferimento allo stesso oggetto deve attendere la terminazione del th1 per iniziare th2
(f ) th1 e th3 eseguano contemporaneamente uno l’istruzione istr1 e l’altro l’istruzione istr3?
Sì perchè si riferiscono a due oggetti distinti quindi non interferiscono con i thread che eseguono metodi sincronizzati dell'altro