У меня есть тема, которая имеет только работать, когда определенное обстоятельство приходит иначе он просто перебирает пустой бесконечный цикл:.Java производительность бесконечного цикла
public void run() {
while(true) {
if(ball != null) {
// do some Calculations
}
}
}
ли это влияет на производительность, когда цикл фактически делает ничего, но он должен проверить, нужно ли делать вычисления на каждой итерации? Только создание этого потока при необходимости для меня не является вариантом, потому что мой класс, который реализует Runnable, является визуальным объектом, который будет отображаться все время.
Редактировать: так ли хорошее решение? Или лучше использовать другой метод (относительно производительности)?
private final Object standBy = new Object();
public void run() {
while(true) {
synchronized (standBy) {
while(ball != null) // should I use while or if here?
try{ standBy.wait() }
catch (InterruptedException ie) {}
}
if(ball != null) {
// do some Calculations
}
}
public void handleCollision(Ball b) {
// some more code..
ball = b;
synchronized (standBy) {
standBy.notify();
}
}
Используйте 'BlockingQueue'; этот бесконечный цикл будет потреблять все время процессора. – twentylemon
Нет никаких обстоятельств, в которых эта нить не работает. Это всегда делает работу. –
Есть ли у вашего компьютера запасной процессор? Если у вас достаточно процессоров, то непрерывно работающая нить дешевая. Если нет, это стоит вам. –