据我所知,Swing GUI应用程序中有3个线程:
main()
方法通常,main方法只是调用SwingUtilities#invokeLater(Runnable)
来初始化一个窗口等等,因此GUI初始化是在EDT上完成的... BTW,据我所知(再次) ,触及GUI的一切都必须在EDT上执行......
问题:用于/可用的主线程是什么?在致电invokeLater()
后它会不会消失?它消耗资源吗?我可以(并且这是一个很好的做法)使用它来执行...我不知道......网络的东西?
答案 0 :(得分:2)
Swing程序员实际上用 3种线程来处理:
初始线程创建Runnable以运行swings任务并在EDT中安排它。之后,该程序主要由GUI驱动,应用程序代码仍然存在并且可以继续执行其他任务(网络工作人员,因为您注意到)并消耗资源尽可能多因为它需要。
任何Swing组件方法都必须由EDT(但其中一些)进行调用,因为它们的swing方法不是" 线程安全的"。所以,
SwingUtilities#invokeLater(Runnable)
只需将 EDT 任务列表中的runnable排队,然后等待轮到它运行。
doc here非常有帮助。
答案 1 :(得分:2)
当控件到达main()
的末尾时,Java程序中的主线程就会死掉。
在您描述的程序体系结构中,主线程已经创建了EDT,可能还有其他线程,而那些其他线程使JVM保持活动状态。
Java中的每个线程都是守护程序线程或非守护程序线程。后者是新Thread
的默认情况。如果你想要一个守护进程,你必须调用t.setDaemon(true)
。
只要至少有一个非守护程序线程仍然存在,JVM就会继续运行。
使用/可用的主要线程是什么?
它可用于任何其他目的,您将使用任何其他线程。它会执行您为其执行的任何代码执行。