我想确保我明白一些事情。请确认这是否属实。
我宣布一个线程,并在其中运行一些东西 - 从那一点起的所有内容都将在该线程内运行,除非我明确地创建一个新线程。无论代码通过多少个类和方法 - 它都将保留在同一个线程中。
例如,假设我有一个完全在一个自定义JFrame中运行的应用程序。如果我希望整个应用程序在同一个线程内运行,我可以通过创建一个新线程,并在该线程的run()方法中实例化新的JFrame来实现。
这实际上是否会确保整个应用程序将在创建JFrame的线程内运行,除非我显式创建新线程并在新线程中运行某些内容?
这是一个普遍的问题,但让我先谈谈Swing:
如果我希望整个Swing应用程序在EDT内部运行(并且请纠正我,如果我错了 - 正是我大部分时间都需要使用Swing),它足以在SwingUtilities.invokeLater()
方法中使用main
一次,如下所示:
public static void main(String[]args){
SwingUtilities.invokeLater( new Runnable(){
JFrame frame = new CustomJFrame(); // where the entire application runs.
} );
}
答案 0 :(得分:6)
一个我声明一个线程,并在其中运行一些东西 - 一切都来自 除非我明确说明,否则该点将在该线程内运行 创建一个新线程。无论代码有多少个类和方法 通过 - 它将保持在同一个线程中。
正确。实际上,即使您创建了一个新线程,当前的线程执行流也永远不会改变。这个新线程将在您启动它之后的某个时间开始执行,但它的流程与创建它的线程无关。
哪 - 如果我错了请纠正我 - 正是我需要的 大部分时间都在使用Swing
你错了。你不想在EDT中做所有事情。 EDT中的任何数据获取和操作都会降低GUI的重复性。比如说你想从数据库中获取大量数据。如果你在EDT中这样做,你的GUI将会冻结,用户将无法与它进行交互,直到你完成它(并可能操纵它)。