长话短说; 我编写了一个包含无限循环的程序,其中一个函数连续运行,并且必须尽可能快地运行。
然而,虽然这个函数在微秒时间尺度内完成,但我需要生成另一个线程,这将花费相当长的时间来运行,但它不能影响前一个线程。
希望这个例子能帮助解释事情:
while (updateGUI == true) { //So, forever until terminated
final String tableContents = parser.readTable(location, header);
if (tableContents.length() == 0) {//No table there, nothing to do
} else {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
//updateTable updates a JTable
updateTable(tableContents, TableModel);
TableColumnModel tcm = guiTable.getColumnModel();
}
});
}
***New thread is needed here!
}
所以我需要让readTable
函数运行无限次,但是我需要启动第二个线程,该线程也将运行无限次,但是它需要毫秒/秒才能完成,因为它必须执行一些文件 I/O,可能需要一些时间才能完成。
我玩过扩展Thread
类,并使用它Executors.newCacheThreadPool
来尝试产生一个新线程。但是,我所做的任何事情都会导致readTable
函数变慢,并导致表无法正确更新,因为它无法足够快地读取数据。
我可能需要重新设计这个循环的运行方式,或者可能只是启动两个新线程并将无限循环放在其中。
以这种方式设计它的原因是,一旦updateTable
函数运行,它会返回一个用于更新 a 的字符串JTable
,这(据我所知)必须在 Java 的 Main Dispatch Thread 上完成,因为是创建 GUI 表的位置。
如果有人有任何建议,我将不胜感激。
谢谢