2014-12-15 2 views
2

У меня есть игра, петлюПрямое назначение или управление с присвоением

class Game extends Runnable { 
    private boolean running = false; 

    @Override 
    public void run() { 
     running = true; 
     while(running) { 
      //... 
     } 
    } 
} 

И я думаю, если это было лучше (в игре цикла) прямое присвоение переменной или элемента управления с if до этого. Например:

x = true; 

или

if(!x) x = true; 

ответ

3

if (!x) x = true; делает не гарантии, что x будет верным в конце заявления. Это связано с тем, что другой поток может установить x в false между вашим тестированием и обходом задания.

Чтобы быть в безопасности, установите x = true, который будет в любом случае быстрее.

Технически, if (!x) x = true; is не атомный на Java, но x = true есть.

+0

Спасибо за помощь! –

3

Они делают то же самое, но первое легче читать и не требует, если заявление.

x = true; 
//x is now true 

if(!x) x = true; 
//x is true if x wasn't true, if x was true before it is still true 
Смежные вопросы