JTextArea.append的线程安全性

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

两者之间会有什么不同:

  1. 同步追加
  2. 瓶颈通过threadpoolexecutor从不同的线程附加
  3. 在EDT上使用invokeLater

或者他们都可以解决这个问题吗? 谢谢

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

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