java进程中的大量线程

java进程中的大量线程,java,multithreading,jvm,Java,Multithreading,Jvm,为什么一个简单的JavaGUI应用程序会创建这么多线程 如果附加了调试器,您可以看到调试器的名称并自行猜测 但是线程可能是一个或两个垃圾收集线程, 一些gui后台线程,如计时器、清理等。如果附加调试器,您可以看到名称并猜测自己 但是线程可能是一个或两个垃圾收集线程, 一些gui后台线程,如计时器、清理等。Java将线程用于很多事情: 当然,应用程序的主线程 应用程序启动的任何线程(例如SwingWorker) Swing有一个单独的事件调度线程以及一些其他内务处理线程 计时器,其中一些可能会隐

为什么一个简单的JavaGUI应用程序会创建这么多线程


如果附加了调试器,您可以看到调试器的名称并自行猜测

但是线程可能是一个或两个垃圾收集线程,
一些gui后台线程,如计时器、清理等。

如果附加调试器,您可以看到名称并猜测自己

但是线程可能是一个或两个垃圾收集线程,
一些gui后台线程,如计时器、清理等。

Java将线程用于很多事情:

  • 当然,应用程序的主线程
  • 应用程序启动的任何线程(例如SwingWorker)
  • Swing有一个单独的事件调度线程以及一些其他内务处理线程
  • 计时器,其中一些可能会隐式启动
  • 用于垃圾收集的一个或多个线程
  • 我认为通常会有一个单独的线程准备运行关闭挂钩
  • 其他JVM内部事务

    • Java在很多方面都使用线程:

      • 当然,应用程序的主线程
      • 应用程序启动的任何线程(例如SwingWorker)
      • Swing有一个单独的事件调度线程以及一些其他内务处理线程
      • 计时器,其中一些可能会隐式启动
      • 用于垃圾收集的一个或多个线程
      • 我认为通常会有一个单独的线程准备运行关闭挂钩
      • 其他JVM内部事务

      一个简单的Java Swing GUI有以下线程:

      Thread [AWT-Shutdown] (Suspended)   
      Object.wait(long) line: not available [native method] [local variables unavailable] 
      Object.wait() line: 485 
      AWTAutoShutdown.run() line: 265 
      Thread.run() line: 619  
      
      Daemon Thread [AWT-Windows] (Suspended) 
      WToolkit.eventLoop() line: not available [native method] [local variables unavailable]  
      WToolkit.run() line: 295    
      Thread.run() line: 619  
      
      Thread [AWT-EventQueue-0] (Suspended)   
      Object.wait(long) line: not available [native method] [local variables unavailable] 
      EventQueue(Object).wait() line: 485 
      EventQueue.getNextEvent() line: 479 
      EventDispatchThread.pumpOneEventForFilters(int) line: 236   
      EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 184    
      EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 174   
      EventDispatchThread.pumpEvents(int, Conditional) line: 169  
      EventDispatchThread.pumpEvents(Conditional) line: 161   
      EventDispatchThread.run() line: 122 
      
      Thread [DestroyJavaVM] (Suspended)  
      

      简单的Java Swing GUI具有以下线程:

      Thread [AWT-Shutdown] (Suspended)   
      Object.wait(long) line: not available [native method] [local variables unavailable] 
      Object.wait() line: 485 
      AWTAutoShutdown.run() line: 265 
      Thread.run() line: 619  
      
      Daemon Thread [AWT-Windows] (Suspended) 
      WToolkit.eventLoop() line: not available [native method] [local variables unavailable]  
      WToolkit.run() line: 295    
      Thread.run() line: 619  
      
      Thread [AWT-EventQueue-0] (Suspended)   
      Object.wait(long) line: not available [native method] [local variables unavailable] 
      EventQueue(Object).wait() line: 485 
      EventQueue.getNextEvent() line: 479 
      EventDispatchThread.pumpOneEventForFilters(int) line: 236   
      EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 184    
      EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 174   
      EventDispatchThread.pumpEvents(int, Conditional) line: 169  
      EventDispatchThread.pumpEvents(Conditional) line: 161   
      EventDispatchThread.run() line: 122 
      
      Thread [DestroyJavaVM] (Suspended)  
      

      此外,如果您启动jconsole(jdk中的免费java应用程序)并连接到运行中的java程序,则会有一个“线程”选项卡,用于查看有多少线程,以及可以单击以获取更多信息的线程列表。

      此外,如果您启动jconsole(jdk中的免费java应用程序)并连接到运行中的java程序,则会出现“线程“选项卡,您可以查看线程的数量,以及可单击以获取更多信息的线程列表。

      太好了。您使用了什么程序?EclipseIDE-startJFrame程序debugger@zim32,看起来像是线程转储Ctrl+Break和*nix上的
      kill-QUIT
      将为您提供此转储。太好了。您使用了什么程序?EclipseIDE-startJFrame程序debugger@zim32,看起来像是线程转储Ctrl+Break和*nix上的
      kill-QUIT
      将为您提供此转储。这不是简单的gui,伙计。@Suraj,这是一个任务管理器,他用来查看他的java应用程序生成了多少线程。@Lirik我的评论应该是双关语:)这不是简单的gui,伙计。@Suraj,这是一个任务管理器,他用来查看他的java应用程序产生了多少线程。@Lirik我的评论应该是双关语:)