JTextArea.append的线程安全性
java doc说append方法是线程安全的。 但是,我记得当我尝试从不同的线程(几个月前)使用附加到文本区域时,我得到混乱的文本,其中线程1将附加一些字符,而线程2将附加一些其他字符。 所以我没有在jtextarea中获得STRINGstring,而是获得了SstTrRINingG。
两者之间会有什么不同:
- 同步追加
- 瓶颈通过threadpoolexecutor从不同的线程附加
- 在EDT上使用invokeLater
或者他们都可以解决这个问题吗? 谢谢
虽然append()
相对于EDT是线程安全的,但 Java 7中的append()
却不是。 使用invokeLater()
追加将按照它们排队的顺序进行处理。 对其他方法的严格审查需要sscce 。
所有的解决方案对我来说都没问题。 由于您无论如何都需要使用某种forms的Invoke更新UI,因此最好只使用invokeLater
来避免任何其他复杂情况。