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组件都不应该从另一个线程访问。