Я немного разбираюсь в многопоточном программировании в Java.
насколько я знаю, любой вновь созданный поток по умолчанию присоединяется к текущей группе потоков. и если вы создаете новую группу ThreadGroup, она прикрепляется как дочерняя к текущей группе ThreadGroup.
Я написал модульную программу, как показано ниже:
- каждый модуль расширяет модуль класса
- каждый модуль имеет свой собственный пул потоков размером 5
- каждый модуль имеет свой собственный экземпляр CustomThreadGroup
- каждый модуль запускается в своем собственном пуле потоков
- выполняется путем вызова метода onCreate() модулей в runnable, отправленном в его пул потоков
представьте, что у нас есть что-то вроде ниже, чтобы запустить каждый модуль:
for(final Module mod : modules){
mod.executor.execute(new Runnable() {
@Override
public void run() {
mod.onCreate();
}
});
}
executor — это пул потоков с настраиваемым ThreadFactory, который добавляет экземпляр модуля CustomThreadGroup во вновь созданный пул потоков Thread by thread.
теперь я могу убедиться, что любой модуль запускается в своем собственном пуле потоков, и любой метод, вызываемый в onCreate, выполняется в том же потоке. если модуль хочет запустить длительную задачу, он должен отправить новый исполняемый файл своему исполнителю или запустить новый поток.
поэтому я могу рекурсивно получить потоки любого модуля, вызвав модуль CustomThreadGroup.enumerate(n, true)
для этого сценария я написал ниже код:
while(true){
for(Module mod : modules){
CustomThreadGroup tg = mod.getThreadGroup();
Thread threads[] = tg.getThreads(); // invoke enumerate internally
// my tasks for classifying threads
}
Thread.sleep(5 * 1000); // sleep for 5 secs
// then recalculate threads count
}
он хорошо работает в отдельном потоке для расчета количества потоков, которые будут вновь созданы в методе onCreate() модуля.
поэтому мой вопрос:
как я могу получать уведомления о вновь созданных потоках, прикрепленных к ThreadGroup, без выполнения бесконечного цикла?
Извините за мой плохой английский.