Потокобезопасность JTextArea.append - PullRequest
5 голосов
/ 09 декабря 2011

В документе Java говорится, что метод добавления является потокобезопасным. Однако я вспоминаю, что когда я пытался использовать добавление к текстовой области из разных потоков (несколько месяцев назад), я получал беспорядочный текст, где поток 1 добавлял некоторые символы, а поток 2 добавлял некоторые другие символы. Поэтому вместо получения строки STRING в jtextarea я получаю SstTrRINingG.

Какая разница будет между:

  1. синхронизация добавления
  2. узкое место добавляется из разных потоков через threadpoolexecutor
  3. с использованием invokeLater на EDT

или они все подходят для исправления проблемы? Спасибо

Ответы [ 2 ]

7 голосов
/ 09 декабря 2011

Хотя append() был поточно-ориентированным относительно EDT , append() в Java 7 нет. Добавление с использованием invokeLater() будет обрабатываться в том порядке, в котором они поставлены в очередь . Критическое исследование других подходов потребует sscce .

1 голос
/ 09 декабря 2011

Все ваши решения кажутся мне нормальными. Так как вам все равно потребуется использовать Invoke для обновления пользовательского интерфейса, вероятно, лучше всего использовать invokeLater, чтобы избежать других сложностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...