程序开了2个子线程,现在要让所有的线程发送同一个消息,我就要得到所有的子线程,这个怎么搞,谢谢

解决方案 »

  1.   

    让所有的线程发送同一个消息,什么意思啊,run()方法相同不就行了吗
      

  2.   

    看看这个例子就明白了,一共三个线程。其中main线程是jvm自动启动的。public class AllThread { /**
     * @param args
     */
    public static void main(String[] args) {
    new Thread("thread1") {
    public void run() {
    for (int i = 0; i < 2; i++) {
    try {
    Thread.sleep(500);
    } catch (Exception e) {
    }
    }
    }
    }.start();

    new Thread("thread2") {
    public void run() {
    for (int i = 0; i < 2; i++) {
    try {
    Thread.sleep(500);
    } catch (Exception e) {
    }
    }
    }
    }.start(); ThreadGroup tg = Thread.currentThread().getThreadGroup();
    Thread[] threads = new Thread[20];
    int count = tg.enumerate(threads);
    for (int i = 0; i < count; i++) {
    System.out.println(threads[i].getName());
    } }}
      

  3.   

    不行,提示说
    at java.lang.ThreadGroup.enumerate(Unknown Source)
      

  4.   

    代码:
    public class AllThread { public static Thread[] getAllThread() {
    ThreadGroup root = Thread.currentThread().getThreadGroup();
    ThreadGroup ttg = root;
    while ((ttg = ttg.getParent()) != null) root = ttg;
    Thread[] tlist = new Thread[(int)(root.activeCount() * 1.2)];
    return java.util.Arrays.copyOf(tlist, root.enumerate(tlist, true));
    } public static void main(String[] args) {
    Thread[] ts = getAllThread();
    for (Thread t : ts) {
    System.out.println(t.getId() + ": " + t.getName());
    }
    }}
    输出:
    2: Reference Handler
    3: Finalizer
    4: Signal Dispatcher
    5: Attach Listener
    1: main
    最好别操作前 4 个系统线程。
      

  5.   

    是运行通不过还是编译出错?换成int count = tg.enumerate(threads, false);试试
      

  6.   


    可以运行,结果
    main
    thread1
    thread2
      

  7.   


    2: Reference Handler
    3: Finalizer
    4: Signal Dispatcher
    5: Attach Listener上面 4 个是系统级线程,Java 应用程序启动后它们会被自动创建并启动,如果使用了 AWT 或 Swing,还会有更多线程被自动创建并启动以处理窗体事件等。其中 Finalizer 是处理垃圾回收的。1: main这个是与 main 方法对应的主线程。