Ber*_*era 4 java desktop swing multithreading
我在桌面摇摆应用程序中使用了代码,我没有太多的线程专业知识,因为我是一个休闲的网络程序员,处理摇摆不是我的糖果......
我想知道是否有更好的方法来控制我的3个任务,我需要在我的应用程序中并行运行它们.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
task 1
}
});
Runnable r;
r = new Runnable() {
public void run() {
task 2
}
};
EventQueue.invokeLater(r);
Thread worker = new Thread() {
public void run() {
task 3
}
};
worker.start();
Run Code Online (Sandbox Code Playgroud)
谢谢!
#1和#2是相同的.您应该使用数字#1,因为这是API的众所周知的部分.
是否使用#1或#3取决于以下内容:
是否对用户界面或其支持模型进行了更改?如果是,请使用#1.
这是一项长期运行的任务:如果是,请使用#3.
如果它是一个长期运行的任务,最终将修改用户界面或其支持模型,请在单独的线程中执行长时间运行的任务,然后调用incokeLater来更新用户界面.
此外,不是每次都创建一个新线程,而是使用ExecutorService,以便重用线程.
它可能会变得有点复杂,例如,如果你当前在事件线程中(即:在一个ActionListener.actionPerformed(),那么你不需要(因为不应该)调用invokeLater,但它的要点是在上面.
你想做什么?您的线程是在Swing GUI中运行还是独立于GUI?
invokeLater()如果线程正在使用Swing用户界面执行某些操作,则应该使用,因为这只能通过Event Dispatch Thread完成.Swing是单线程的.(你的任务1和2)
如果你在后台完全做某事,例如编写一个大的XML文件,可以在后台线程中完成.(您的任务3)但您仍然可以使用Swing GUI进行通信invokeLater().
另一种选择是如果你想定期运行一个线程,例如每隔5分钟,就可以使用一个TimerTask.或者,如果它独立于Swing GUI java.util.TimerTask.
Swing中的并发可能值得一读:
Swing程序员处理以下类型的线程:
- 初始线程,执行初始应用程序代码的线程.
- 事件调度线程,执行所有事件处理代码.大多数与Swing框架交互的代码也必须在此线程上执行.
- 工作线程,也称为后台线程,执行耗时的后台任务.
| 归档时间: |
|
| 查看次数: |
334 次 |
| 最近记录: |