2016-02-13 4 views
0

Я хочу начать ThreadGroup, который содержит много потоков, но метод start() нет в классе ThreadGroup. У этого есть метод stop(), чтобы остановить группу нитей. Как запустить группу потоков, если метод start() недоступен?Как начать ThreadGroup в java?

Пожалуйста, ознакомьтесь с нижеприведенным кодом, я могу начать нить один за другим, но не могу начать группу нитей, потому что start() метода нет в ThreadGroup класс. Требование состоит в том, что нам нужно одновременно начинать группу потоков, как это можно сделать?

public class ThreadGroupExample 
{ 
    public static void main(String[] args) 
    { 
    ThreadGroup thGroup1 = new ThreadGroup("ThreadGroup1"); 

    /* createting threads and adding into thread grout "thGroup1" */ 
    Thread1 th1 = new Thread1(thGroup1, "JAVA"); 
    Thread1 th2 = new Thread1(thGroup1, "JDBC"); 
    Thread2 th3 = new Thread2(thGroup1, "EJB"); 
    Thread2 th4 = new Thread2(thGroup1, "XML"); 

    /* starting all thread one by one */ 
    th1.start(); 
    th2.start(); 
    th3.start(); 
    th4.start(); 

    // thGroup1.start(); 

    thGroup1.stop(); 

    } 
} 

class Thread1 extends Thread 
{ 
    Thread1(ThreadGroup tg, String name) 
    { 
    super(tg, name); 
    } 

    @Override 
    public void run() 
    { 
    for (int i = 0; i < 10; i++) 
    { 
     ThreadGroup tg = getThreadGroup(); 
     System.out.println(getName() + "\t" + i + "\t" + getPriority() 
      + "\t" + tg.getName()); 
    } 
    } 
} 

class Thread2 extends Thread 
{ 

    Thread2(String name) 
    { 
    super(name); 
    } 

    Thread2(ThreadGroup tg, String name) 
    { 
    super(tg, name); 
    } 

    @Override 
    public void run() 
    { 
    for (int i = 0; i < 10; i++) 
    { 
     ThreadGroup tg = getThreadGroup(); 
     System.out.println(getName() + "\t" + i + "\t" + getPriority() 
      + "\t" + tg.getName()); 
    } 
    } 
} 
+0

«ThreadGroup» не сможет запускать все свои потоки по той простой причине, что потоки фактически добавляются в группу только при их запуске. Обратите внимание, что ** устаревшие и опасные методы 'stop()' и 'suspend()' в 'ThreadGroup' просто запускают тот же самый последовательный цикл, который вы все равно избегаете. – RealSkeptic

+0

@RealSkeptic вы уверены, что это дубликат? Я утверждаю, что дублирование - это то, что происходит после OP, но вопрос заключается в другой теме/проблеме, которая не объясняется в dup. Пожалуйста, передумайте. – Idos

+1

@Idos Я считаю, что в его текущей форме есть проблема XY, в которой фактическая проблема является дубликатом, а вопрос «ThreadGroup» является лишь вторичным. Ваш ответ и мой комментарий дают достаточно информации, чтобы объяснить, почему ThreadGroup не имеет значения для решения этой проблемы, но любой реальный ответ на OP фактически будет ответом на обман. – RealSkeptic

ответ

2

От docs:

Нить группа представляет собой набор нитей.

Он не предназначен в .start() несколько потоков одновременно.

Вы можете добавить Threads в группу, или другие ThreadGroups, которые могут получить доступ к состоянию других Thread S', но не начать ThreadGroup вместе. A Thread имеет право получать доступ к информации о своем собственном ThreadGroup, но не для доступа к информации о его родителе ThreadGroupThreadGroup или любом другом ThreadGroups.

Для получения дополнительной информации о доступных функциях с примером использования читайте here.