Java 从不同线程更新AbstractTableModel

Java 从不同线程更新AbstractTableModel,java,multithreading,swing,jtable,abstracttablemodel,Java,Multithreading,Swing,Jtable,Abstracttablemodel,我有一个类,它实际上是一些数据的列表,它扩展了AbstractTableModel。此类中的数据存储在线程安全的arraylist中 但是,如果我想添加一些数据,假设我在类扩展AbstractTableModel中有这个方法: public void addData(Data data){ threadSafeArrayList.add(data); fireTableRowsInserted(threadSafeArrayList.size()-1;threadSafeArrayLis

我有一个类,它实际上是一些数据的列表,它扩展了
AbstractTableModel
。此类中的数据存储在线程安全的arraylist中

但是,如果我想添加一些数据,假设我在类扩展
AbstractTableModel
中有这个方法:

public void addData(Data data){
  threadSafeArrayList.add(data);
  fireTableRowsInserted(threadSafeArrayList.size()-1;threadSafeArrayList.size());
}
我应该在EDT上调用此方法中的所有内容。 但是,当其他线程在该列表中循环以获取一些数据时,EDT希望将数据添加到此列表中。然后EDT被阻塞

除了使用
SwingWorker
之外,向许多其他线程使用的表模型添加/删除数据的最佳实践是什么

期望使用

我也希望使用
SwingWorker
,但您可能的意思是除了
SwingWorker

最佳做法是更新上的
表格模型
,如
进程()
实现
JDBCWorker
,它是
SwingWorker
的子类


或者,您可以使用
EventQueue.invokeLater()
,更新表的模型,如图所示,但这种方法繁琐且容易出错。有关详细信息,请参阅注释。

多线程绝对不能使用表模型。简单。表应该使用表模型来显示数据,而不是其他。您可以使用事件总线将数据从其他线程/逻辑发送到EDT以显示它。但任何Swing组件都不应该从另一个线程访问。