gpt4 book ai didi

java - SwingWorker要更新TreeModel吗?

转载 作者:行者123 更新时间:2023-12-02 00:55:25 24 4
gpt4 key购买 nike

我的应用程序中有很多 JTree,它们都使用同一自定义 TreeModel 类的不同实例(具有不同的选项)。我试图添加一些线程来加快速度,因为 getChildren() 成员需要一段时间才能运行,我向 TreeModel 添加了一个 SwingWorker 子类,并在 getChildren() 中创建了该工作线程的实例并执行它,然后返回它的 get() 结果。

我不断收到 ConcurrentModificationExceptions,并且我知道我应该同步某些内容,但不确定是什么。有人对如何保持我的 TreeModel 安全响应有任何建议吗?

谢谢!约书亚

最佳答案

首先,我想知道您为什么尝试使用线程来加快速度。是 CPU 限制操作,还是网络/磁盘限制?

您的描述看起来好像您的 getChildren 在返回之前等待操作完成。这对于多核硬件上的并行操作可能很有用,但不是通用模型。通常我们(以及 SwingWorker 所做的)是在另一个线程上运行代码块,而事件调度线程可以自由地继续执行,直到它收到事件以处理来自后台线程的数据。

SwingWorker 没有记录它在任何地方抛出 ConcurrentModificationException 。堆栈跟踪可能会有所帮助。

我通常建议避免使用 SwingWorker。它非常适合创建一些演示操作,但设计很差。

线程化是困难的,特别是现在多线程硬件实际上bug更多。随意添加synchronized不会让问题消失。一个相对简单的通用方法是避免共享可变对象(或至少改变共享对象)。将一组 EDT 中未使用的参数传递到后台线程。同样,将未进行其他修改的参数传递回 EDT。

关于java - SwingWorker要更新TreeModel吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/846317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com