У меня есть следующий сценарий, который должен быть изменен, как можно скорее:
1. Группа последовательных нитей выполняет (содержит 3 темы)
2. Группа другого последовательного нити (исполняет содержит 2 нити)
3. группа из параллельных потоков выполняет (содержит 9 нитей таким образом, что производитель-потребитель подход резьбы применяется правильно)Выполнение последовательных операций для групп параллельных потоков
Почему я создал этот сценарий?
Чтобы выполнить определенные потоки сначала (точка-1: содержит 3 потока), после их обработки я должен выполнить еще 2 потока (точка-2: содержит 2 потока). Если и только если 1 и 2 точки покрыты, мне необходимо обработать точку-3.
Первоначально я должен был выполнить все потоки для обработки параллельных операций, но я оставил эту идею, поскольку параллельные потоки будут выполняться одновременно.
Для вышеуказанной ситуации все работает плавно, пока не возникла какая-либо проблема.
Почему мне нужно изменить описанный выше сценарий?
Иногда я получаю Исключение, которое можно обрабатывать хорошо в случае параллельных потоков. Хотя это же Исключение, если я получаю в Последовательные потоки, которые становятся неспособными обрабатывать. Так как вся другая обработка последовательных потоков переходит в состояние ожидания до тех пор, пока первая не завершится.
Итак, мне нужно воспользоваться преимуществами параллельных потоков, но я выбрал этот способ, чтобы быть легким, что стало трудно справиться с ситуацией для приложения.
Итак, мне нужно создать такой сценарий, в котором я должен выполнять разные параллельные потоки для фиксированного порядка. Например:
заказ первого = процесс первых 3 параллельных нити
заказ второго = процесс следующих 2 параллельных потоки
заказ 3rd = Процесс следующие 9 параллельные нити
Кроме , приведенный выше случай несколько ограничен, хотя для этого мне нужно общее решение. Например, если в будущем я хочу добавить еще 2 потока из Order-1 или, если я даже удалю некоторые потоки для любого порядка, последовательность групп должна выполняться по желанию.
Есть ли какой-либо способ в java, через который мы можем создать группу параллельных потоков, чтобы они могли выполняться для любого порядка, который мы можем указать?
Редактировать
У меня есть следующий фрагмент кода, если вы можете помочь мне изменения:
// Уровень-1
Thread[] threads = new Thread[list1.size()];
int j=0;
for(list1.size()){
Object delegator1 = new Object("Level-1");
Thread th = new Thread(delegator1);
threads[j]=th;
th.start();
j++;
}
for(Thread thread: threads){
thread.join();
}
// Уровень-2
threads = new Thread[list2.size()];
j=0;
for(list2.size()){
Object delegator2 = new Object("Level-2");
Thread th = new Thread(delegator2);
threads[j]=th;
th.start();
j++;
}
for(Thread thread: threads){
thread.join();
}
// Level-3 & 4 -> Applied Producer-Consumer с использованием wait-notify работает нормально.
for(list3.size()){
Object delegator3 = new Object("Level-3 & 4")
Thread th = new Thread(delegator3);
th.start();
}
Я хочу, чтобы эти различные уровни, чтобы выполнить параллельно, но если первый уровень завершает второй уровень должен после этого выполняет.
Вы пытались использовать многоуровневый потребитель-производитель? Я имею в виду, что Order-1 будет производителем для Order-2, а Order-2 станет потребителем для группы нитей Order-3. – Santosh
Нет. Я не пробовал многоуровневого производителя. Поскольку таким образом количество выполняемых потоков будет ограничено. Значит, если в будущем мне нужно добавить еще 50 адов на уровень 1, тогда смена кода не должна быть выполнена. Если мы сможем справиться без какого-либо изменения кода, пожалуйста, помогите мне сохранить эту иерархию. – Sanchit
Не совсем, вы всегда можете сохранить количество потоков, настраиваемых через некоторый файл свойств. Приложение будет читать конфигурацию при запуске. – Santosh