Например, мне всегда нужно запустить 100 потоков, чтобы выполнить какое-либо действие.У меня есть класс, который называется ThreadsWorker
, который ищет количество потоков и запускает отсутствующие потоки, если некоторые предыдущие были закончены.Итак, вот таблица, которая описывает ситуацию:
1 second: 100 threads
2 second: 92 threads (ThreadsWorker generates new 8 threads)
3 second: 100 theads
4 second: 72 threads (ThreadsWorker generates 28 threads)
И так далее.Мои потоки являются анонимными вызовами (просто new Thread(new Runnable(...)).start()
), потому что я не знаю, как правильно сохранить их в массив Threads[]
, потому что, хотя ThreadsWorker
будет сохранять threads[i] = new Threads()
, некоторые потоки могут быть завершены, а затем будутстолкновение с индексами массива.
Из-за анонимных вызовов я сейчас использую переменную threadsCount
и увеличиваю ее в начале тела потока и уменьшаю в конце тела потока (используя synchronized
).Хорошо, это работает правильно, и мой единственный способ - использовать цикл while()
, который проверяет, если threadsCount == 0
, когда прогресс завершен.
Я думаю, что это в стиле C, но не в стиле Java:) Итак, вы можете помочь мне сделать это на Java?