JTextArea.append的线程安全性

时间:2011-12-08 20:05:01

标签: java swing

java doc说append方法是线程安全的。但是,我记得当我尝试从不同的线程(几个月前)使用附加到文本区域时,我得到混乱的文本,其中线程1将附加一些字符,而线程2将附加一些其他字符。 所以我没有在jtextarea中获得STRINGstring,而是获得了SstTrRINingG。

之间会有什么不同:

  1. 同步追加
  2. 瓶颈通过threadpoolexecutor从不同的线程附加
  3. 在EDT上使用invokeLater
  4. 或者他们都可以解决这个问题吗? 感谢

2 个答案:

答案 0 :(得分:7)

虽然append()相对于EDT 是线程安全的,但Java 7中的append()却不是。使用invokeLater()的附加内容将按照enqueued的顺序进行处理。对其他方法的严格审查需要sscce

答案 1 :(得分:1)

您的所有解决方案对我都不错。由于您无论如何都需要使用某种形式的Invoke来更新UI,因此最好只使用invokeLater来避免任何其他复杂情况。