【发布时间】:2013-10-30 10:19:26
【问题描述】:
长话短说;我编写了一个包含无限循环的程序,其中一个函数连续运行,并且必须尽可能快地运行。
但是,虽然此函数在微秒时间范围内完成,但我需要生成另一个线程,这将花费相当长的时间来运行,但它不能影响前一个线程。
希望这个例子能帮助解释事情:
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 函数运行,它会返回一个用于更新JTable 的字符串,这(据我所知)必须是在 Java 的 Main Dispatch Thread 上完成,因为这是 GUI 表的创建位置。
如果有人有任何建议,我将不胜感激。
谢谢
【问题讨论】:
-
如果不处理 == 0 的情况,最好使用 if (tableContents.length() != 0) 并删除 else 。
-
啊,是的,好点。谢谢!
标签: java multithreading swing concurrency jtable