|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2516
|
[Java] Problema concorrenza
Salve ragazzi
Ho un problema su cui sto sbattendo la testa da stamattina e non riesco a venirne a capo Ho una serie di thread, ognuno dei quali gestisce un TreeSet di un particolare oggetto da me creato. Tale TreeSet è allocato nella run() del runnable con una new. Questo albero è riempito a partire da un albero dato in ingresso al costruttore del runnable. Chiamo poi una funzione che elabora questo albero e che funziona perfettamente in un ambiente non multithreading. Il codice più o meno è cosi (in realtà la stessa operazione è fatta più volte in un ciclo while): Codice:
public class MyRunnable implements Runnable
{
TreeSet<MyClass> in;
public MyRunnable(TreeSet<MyClass> in)
{
this.in = in
}
public void run()
{
TreeSet<MyClass> mytree= new TreeSet<MyClass>();
mytree.addAll(in);
...
ClasseStatica.myFunction(mytree);
}
}
Non capisco perchè devo mettere synchronized visto che il TreeSet dovrebbe essere esclusivo di ogni thread... Invece debuggando un po' accade come se un altro thread accedesse a quell'albero e togliesse un nodo Dove sbaglio? Ultima modifica di -Slash : 07-05-2012 alle 22:14. |
|
|
|
|
|
#2 | |
|
Member
Iscritto dal: Jul 2011
Messaggi: 246
|
Ciao, guardando la javadoc relativa al metodo addAll() si legge:
Quote:
Sto assumendo che allochi gli oggetti della classe MyRunnable passando al costruttore sempre lo stesso oggetto, da qui il problema sopra detto. Devi risolvere la concorrenza in qualche modo. Nel package java.util.concurrent ci sono varie classi per implementare strutture dati concorrenti.
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto. CONCLUSO POSITIVAMENTE CON: oldfield |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Dec 2001
Città: Cernobbio -Co-
Messaggi: 47
|
- ClasseStatica.myFunction(Treeset) è rientrante? In altre parole, non va a modificare nulla di condiviso e lavora solo su variabili locali alla funzione stessa?
- gli oggetti di MyClass come sono? Sono immutabili? Sono thread-safe?
__________________
micheledellatorre.net |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:42.



















