В процессе изучения многопоточности JAVA возник вопрос:
Если мне с основного класса нужно вызывать во втором потоке какой-то метод с другого класса (например я буду проверять коллекцию на наличие некоторого элемента), но мне это нужно делать не в определенный промежуток времени, а по какому-то событию, (в нашем случае это каждые 10000 миллисекунд), так вот, как мне опять запустить мой метод с класса ThreadTest, если прошлый поток уже отработал и использовать th.start()
нельзя?
Нужно ли для этого привязывать каждый раз к нему новый поток, так как прошлый отработал свое?
if(!th.isAlive()){}
если прошлый поток уже не жив, мы создаем новый th = new Thread(ts)
и запускаем его th.start()
это единственный вариант?
Есть основной класс
public class Main extends Thread {
Thread th;
ThreadTest ts = new ThreadTest();
public void run() {
while(true) {
try {
Thread.sleep(10000);
if(!th.isAlive()) {
th = new Thread(ts);
th.start();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public Main() throws InterruptedException {
th = new Thread(ts);
th.start();
this.start();
}
public static void main(String[] args) throws InterruptedException{
new Main();
}
}
И второстепенный
public class ThreadTest implements Runnable {
@Override
public void run() {
for(int i=0; i<999999; i++){
System.out.println("Do stuff!");
}
}
}
Если это единственный способ, как сильно это отразиться на производительности?
Если каждый раз будет создаваться поток с именем Thread-n наступит ли момент когда нельзя будет создать новый поток? (переполнение int (в теории)).
Будет ли уборщик мусора корректно убирать отработавшиеся потоки или они будут занимать память?
Извините если что не так, особо глубоко не понимаю, спасибо заранее.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Создаю новый проект, в нем класс и форму, добавляю в JPanel кнопку, но почему-то не могу ни поменять её размер, ни перетащить в другое место на панели,...
Есть 2 потока, один из них начал выполнение synchronized метода, внутри которого применяется Threadsleep(5000)