Я сделал несколько поисков здесь и не нашел ответа, поэтому я думаю, что лучше спросить. Я запускаю немного дорогой алгоритм в простом приложении Java swing. Позвольте мне описать структуру:Java Threads и высокое использование процессора
В моей JPanel
run()
метод:
public void run() {
while(true) {
Algorithm alg = new Algorithm(signal);
new Thread(alg).start();
//Wait for algorithm to finish
signal.await(alg);
updateInterface();
Thread.sleep(60L);
}
}
алгоритм перебирает пикселей файла .JPG, то петли через другой большой массив Integer (длина ~ 12000), и возвращается. Нет очень дорогого калькулятора. Я вызываю Thread.sleep(60L)
в алгоритме run()
метод также.
Метод udpateInterface()
очень быстрый, просто нарисуйте java.awt.Polygon
объектов.
Несмотря на то, что я звоню Thread.sleep(60L)
, использование ЦП составляет около 160% на моей книге Mac (2.4 ГГц Intel Core 2 Duo, Mem 4GB 1067).
Есть ли способ, которым я могу запустить это без таяния моего компьютера? Я использую CountDownLatch
как механизм уведомления ожидания.
Спасибо!
'Thread.sleep' влияет на родительский поток (один с' while' показано), а не * новый * нить ('новый Thread') ... код может фактически быть нерест несколько потоков сразу, в зависимости от «сигнала» и всего. –
Да, но поток алгоритмов также имеет вызов сна. – Fernando
Я не понимаю, какова цель вызова 'sleep'. Если у вас есть работа, которую нужно сделать, почему вы спите? »Что вы имеете в виду« таяние моего компьютера ?! » Работа не может растопить ваш компьютер. Цель компьютера - выполнять работу. Если у вас есть полезная работа, сделайте это так.Для этого они нужны. –