Java Swing中的线程,应用程序中三种方法概述
我在桌面swing应用程序中使用下面的代码,但我没有太多的专业知识 使用线程,因为我是一个随意的web程序员,处理swing不是我的拿手好戏 我想知道是否有更好的方法来控制我的3个任务,我需要在我的应用程序中为线程并行运行它们Java Swing中的线程,应用程序中三种方法概述,java,multithreading,swing,desktop,Java,Multithreading,Swing,Desktop,我在桌面swing应用程序中使用下面的代码,但我没有太多的专业知识 使用线程,因为我是一个随意的web程序员,处理swing不是我的拿手好戏 我想知道是否有更好的方法来控制我的3个任务,我需要在我的应用程序中为线程并行运行它们 SwingUtilities.invokeLater(new Runnable() { public void run() { task 1 } });
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();
谢谢 你想做什么?您的线程是在Swing GUI中运行还是独立于GUI 如果线程正在使用Swing用户界面执行某些操作,则应该使用,因为这只能从。Swing是单线程的。(您的任务1和2) 如果您完全在后台执行某些操作,例如编写大型XML文件,则可以在后台执行。(任务3)但是您仍然可以使用
invokeLater()
与Swing GUI通信
另一种选择是,如果希望定期运行线程,例如每5分钟运行一次,则可以使用。或者如果它独立于Swing GUI
可能值得一读:
Swing程序员处理以下类型的线程:
- 初始线程,执行初始应用程序代码的线程
- 事件分派线程,其中执行所有事件处理代码。与Swing框架交互的大多数代码也必须在此线程上执行
- 工作线程,也称为后台线程,用于执行耗时的后台任务
它可能会变得更复杂一点,例如,如果您当前在事件线程中(即:在
ActionListener.actionPerformed()
),那么您不需要(如in-should-not)调用invokeLater,但要点就在上面。同意除“如in-should-not”之外的所有内容侦听器回调中的调用调用器(通常)保证在EDT上运行:这样做会在所有挂起事件完成后调用任务,因此会影响执行顺序。如果您执行的是长时间运行的任务,最终会修改用户界面,那么SwingWorker是创建自己的线程或直接使用执行者服务的好选择。