2011-12-08 9 views
5

El documento de Java indica que el método de apéndice es seguro para subprocesos. Sin embargo, recuerdo que cuando traté de usar el apéndice para el área de texto de diferentes hilos (hace varios meses), obtengo un texto confuso donde el hilo 1 agregaría algunos caracteres y el hilo 2 añadiría otros caracteres. Así que, en lugar de obtener STRINGstring en jtextarea, obtengo SstTrRINingG.Seguridad de subprocesos de JTextArea.append

¿Qué diferencias habría entre:

  1. la sincronización de las órdenes de agregar
  2. cuellos de botella anexa a partir de diferentes temas a través de un threadpoolexecutor
  3. usando invokeLater en la EDT

o son todos bien para arreglar el problema? Gracias

+1

Veo que el documento dice que es seguro para subprocesos pero también dice: "Para más información, consulte Cómo usar subprocesos". –

+0

Hay un ejemplo relacionado [aquí] (http://stackoverflow.com/a/3245805/230513). – trashgod

+0

Nunca veo eso, solo no lo creo, en Java + Unicode (UTF-8/16), ¿pueden publicar http://sscce.org/ – mKorbel

Respuesta

7

Mientras append() era hilo seguro con respecto a la EDT, append() en Java 7 no lo es. Los anexos que utilizan invokeLater() se procesarán en el orden en que son enqueued. Un examen crítico de los otros enfoques requeriría un sscce.

+0

Énfasis añadido. – trashgod

+0

Consulte también este relacionado [ejemplo] (http://stackoverflow.com/a/3245805/230513). – trashgod

1

Todas sus soluciones me parecen correctas. Como deberá usar alguna forma de Invoke para actualizar la IU de todos modos, probablemente sea mejor usar invokeLater para evitar cualquier otra complicación.

+0

+1? Probablemente sea la forma más fácil de estar seguro. – trashgod

Cuestiones relacionadas