2011-12-08 14 views
5

Il documento java dice che il metodo append è thread-safe. Tuttavia, ricordo che quando ho provato ad usare l'append dell'area di testo da diversi thread (diversi mesi fa), ho un testo confuso dove il thread 1 aggiungeva alcuni caratteri e il thread 2 aggiungeva altri caratteri. Quindi, invece di ottenere STRINGstring nella jtextarea, ottengo SstTrRINingG.Sicurezza thread di JTextArea.append

Quali differenze ci sarebbe tra:

  1. sincronizzazione accodamento
  2. strozzature aggiunge da diversi fili attraverso una threadpoolexecutor
  3. utilizzando invokeLater sulla EDT

o sono tutti bene per risolvere il problema? Grazie

+1

Vedo che il documento dice che è thread-safe ma dice anche "Si veda Come usare i thread per maggiori informazioni". –

+0

C'è un esempio correlato [qui] (http://stackoverflow.com/a/3245805/230513). – trashgod

+0

Non lo vedo mai, non ci credo, in Java + Unicode (UTF-8/16), puoi postare http://sscce.org/ – mKorbel

risposta

7

Mentre append() era sicuro rispetto al EDT, filo append() in Java 7 non è. L'aggiunta utilizzando invokeLater() verrà elaborata nell'ordine in cui sono enqueued. Un esame critico degli altri approcci richiederebbe un sscce.

+0

Enfasi aggiunta. – trashgod

+0

Vedere anche questo relativo [esempio] (http://stackoverflow.com/a/3245805/230513). – trashgod

1

Tutte le tue soluzioni sembrano ok per me. Poiché è necessario utilizzare una qualche forma di Invoke per aggiornare l'interfaccia utente, è probabilmente meglio usare solo invokeLater per evitare altre complicazioni.

+0

+1 è probabilmente il modo più semplice per essere sicuro. – trashgod