我创建了一个简单的Java应用程序,它有一个JFrame和几个JButton。当我尝试使用JVMTI检查java应用程序时,我发现虽然我没有创建任何显式线程但是它们中有很多产生。
我可以找到以下主题:
他们中的大多数都处于Runnable状态。有人能告诉我这些线程的功能吗?
答案 0 :(得分:9)
底层库使用这些线程来管理图形应用程序所需的小部件,显示,事件循环和其他管道。
GUI应用程序通常包含许多移动部件,如果您注意到您不必显式编写任何代码来管理这些部件(例如,更新屏幕,绘制按钮或处理鼠标)运动)。是这组后台线程负责管理这些部分,并使您尽可能容易地专注于您的应用程序逻辑。
这些线程由您使用的库(例如,AWT,Swing等)生成,并且通常在终止时自行清理(以及它们管理的资源)。
答案 1 :(得分:1)
我可以告诉你一个,猜三个......
这是GUI / Awt / Swing线程。写入GUI的任何内容都必须在此线程上执行!有时候,如果我认为另一个线程可能会写入GUI,我会发现我认为争用可能发生的点,并断言当前线程的名称与“AWT-EventQueue-0”相匹配。
我真的希望Sun发布了一个“调试”版本的库,它在所有组件中声明了正确的线程使用 - 它可以节省很多麻烦并且保存Java,因为它有一个非常糟糕的REP,因为它崩溃了GUI真的是那些不了解这个帖子的人。
这些可能都与线程垃圾收集器有关: