|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2007
Messaggi: 38
|
[Java] Perchè rendere synchronized un metodo run()
Salve gente. Qualcuno saprebbe dirmi che effetto ha nel seguente programma rendere synchronized il metodo run() della classe Applicazione?
Codice:
public class Applicazione implements Runnable{
// dati
public syncronized void run(){
//operazioni
}
}
public class UsaApplicazione extends Thread{
public void run(){
for (int i = 0; i < 5 ; i++)
(new Thread(new Applicazione()).start();
}
public static void main(String args[]){
UsaApplicazione a = new UsaApplicazione();
a.start();
}
}
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12861
|
il synchronized dovrebbe fornirti un Lock di default per evitare di scrivere sulla stessa risorsa contemporaneamente da 2 thread diversi...
Se una risorsa viene usata da un thread non può essere usata da nessun altro thread fino a quando non verrà liberata. http://java.sun.com/docs/books/tutor.../syncmeth.html Quote:
|
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jun 2007
Messaggi: 38
|
Ti ringrazio per la risposta, ma il meccanismo di synchronized mi è chiaro, solo che in questo caso particolare non riesco a capire l'effetto del synchronized sul metodo run(), dato che nn riesco ad identificare una risorsa comune essendo presenti diverse istanze di Applicazione che in teoria hanno ognuno un proprio lock
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
La concorrenza non è mai banale, ma penso che tu abbia ragione.
Viene fatto il lock, ma ogni thread ha la sua istanza, quindi non c'è niente di condiviso - a meno di non avere campi statici.
__________________
|Java Base| |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2007
Città: Messina
Messaggi: 502
|
"synchronized" trasforma run() di Applicazione in una sezione critica.
Siccome un solo thread per volta si può trovare in sezione critica, questo causa che i 5 thread Applicazione che vengono creati nel main verranno eseguiti uno per volta e non tutti e 5 (quasi) contemporaneamente come avverrebbe senza "synchronized". |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:59.











|








