Quote Originariamente inviata da Lory1990 Visualizza il messaggio
Il codice simula due processi che riempiono due jprogressbar e accedono al thread della GUI tramite synchronized, ho fatto giusto?
No purtroppo. Lo ripeto: l'accesso alla interfaccia utente va fatto "passare" nel EDT (invokeLater/invokeAndWait), non basta un synchronized. Salvo casi, ben documentati e noti, in cui certi metodi della GUI sono "thread-safe". Ma sono davvero pochi.

Inoltre sempre nei tuoi Runnable hai creato il JProgressBar. Idem è sbagliato, va fatto nel EDT.

E ancora, hai usato synchronized(this) che di per sé è tecnicamente corretto ma non è appropriato. Se vuoi che un thread A possa modificare uno "stato" di qualcosa in modo che poi un thread B possa leggerlo correttamente, devi sì usare la sincronizzazione (se non è già implicita es. in qualche struttura dati) ma sopratutto sia A che B devono usare lo stesso oggetto di lock.