当前位置: 代码迷 >> J2SE >> JAVA程序默认只有一个MAIN线程吗?好象还有其它线程吧解决方案
  详细解决方案

JAVA程序默认只有一个MAIN线程吗?好象还有其它线程吧解决方案

热度:41   发布时间:2016-04-24 12:51:47.0
JAVA程序默认只有一个MAIN线程吗?好象还有其它线程吧
如:
异常处理线程
AWT线程...

------解决方案--------------------
垃圾回收是一个单独的线程。
异常处理不需要单独的线程吧。
------解决方案--------------------
楼上说错了
我确定异常处理是一个单独的线程
------解决方案--------------------
Java code
public class T {    public static void test() throws Exception {        throw new Exception("Hello");    }    @Override    protected void finalize() throws Throwable {        System.out.println(Thread.currentThread().getName()+"Finalize");    }    public static void main(String[] args) {        T t = new T();        try {            test();        } catch (Exception e) {            System.out.println(Thread.currentThread().getName()+"Exception");//异常相关的,肯定是main线程        }        t=null;        System.gc();   //垃圾回收相关的    }}
------解决方案--------------------
2楼该多看点书了,可以参考一下java虚拟机规范中的异常处理介绍,看看jvm怎么提供专门的指令来支持异常处理的。
不知道你的确定结论是如何得到的。
------解决方案--------------------
个人觉得应该是同一线程中的...看了Tinking in java 也没提到异常处理是单独的一个线程
------解决方案--------------------
是有很多呀!但是只是说所以的java应用程序是从主线程main启动的而已。
------解决方案--------------------
用netbeans调试了一下,发现启动的System下的线程有
main
Reference Handler
Finalizer
Signal Dispatcher
Attache Listener
一共五个。
以前的帖子也提到过,只是自己水平太菜,没有关注。
------解决方案--------------------
使用到窗口程序的话还有AWT-Windows、AWT-EventQueue-0等很多线程被启动。
------解决方案--------------------
在4楼的代码中可以直接得到Finalizer线程的信息。
通过线程组也可以直接活动所有线程的信息,不过没有多少实际的意义。
------解决方案--------------------
额 用线程组查看的线程信息 
Java code
    public static void main(String[] args) {                ThreadGroup threadGroup=  Thread.currentThread().getThreadGroup().getParent();        Thread[] list=new Thread [threadGroup.activeCount()];        threadGroup.enumerate(list,true);                for (Thread thread : list) {            System.out.println(thread.getName()+"优先级:"+thread.getPriority());        }    }
  相关解决方案