Я пытаюсь создать приложение, которое будет создавать потоки в дереве подобно манере. Мой основной метод находится на Level0, который создает поток в Level1. Затем Level1 создаст некоторые потоки. Каждый поток в Level1 будет создавать разные наборы потоков как Level2 и так далее.Создание потоков с несколькими уровнями в иерархическом порядке
Ниже код, который я пытаюсь использовать, используя ExecutorService:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ThreadTree {
public static void main(String[] args) {
ExecutorService exec = Executors.newCachedThreadPool();
//This is the main , level0
List ll = new ArrayList<>();
ll.add(2);
ll.add(5);
ll.add(8);
Iterator it = ll.iterator();
while (it.hasNext()) {
exec.submit(new Level1((Integer)it.next()));
}
}
}
class Level1 implements Runnable{
private ScheduledExecutorService exec;
private Integer num;
public Level1(Integer n){
num = n;
exec = Executors
.newScheduledThreadPool(n);
}
@Override
public void run() {
for(int i=0;i<num;i++){
exec.scheduleAtFixedRate(new Level2(), 0, 2, TimeUnit.SECONDS);
}
}
}
class Level2 implements Runnable{
@Override
public void run() {
System.out.println("Current Thread ID : " + Thread.currentThread().getId() + "Current Thread Name : "
+ Thread.currentThread().getName()) ;
//Do some task and create new threads
}
}
У меня 2 вопроса:
- Это единственный подход к созданию потоков в дереве образом? Существуют ли какие-либо другие способы эффективного решения этой проблемы, с некоторыми группировками? Я показал 3 уровня, но также может быть больше уровней.
- В случае, это хороший способ, что является лучшим способом распространения любого сбоя в потоке на одном из уровней над слоем над ним и т. Д.
Заранее спасибо.
Обычно Threads используются для асинхронных задач, которые не выводятся из этих ресурсов другим ресурсам. Итак, вы уверены, что вам нужно создать поток, который уже находится внутри потока? –
Вы сталкивались с группами нитей? например http://www.javaworld.com/article/2074481/java-concurrency/java-101--understanding-java-threads--part-4---thread-groups--volatility--and-threa.html? –
@ user1354678 - У нас есть сценарий, где мы хотим обрабатывать данные для сотрудников для разных компаний. Теперь у каждой компании будут разные отделы, и у каждого из разных отделов будут сотрудники. Мы хотим обрабатывать 1 поток на одного сотрудника, а уровни может отличаться. – Anupam