vendredi 29 mai 2015

Can I synchronize reads of control variables?

The following code will work, but I slightly resent having to write the isRunning() method:

class Test {
    private boolean running;
    public void startX() {
        synchronized(this) {
            running = true
        }
        while (isRunning()) {
            //do something
        }
    }
    public synchronized void stopX() {
        running = false;
    }
    private synchronized boolean isRunning() {
        return running;
    }
}

Can I synchronize reads of the running variable in the while (running){} in some other way, or do I have to write the isRunning() method? The same question applies to other control variables as well, eg

for (;running;) {}

or

if (running) {}

In all of these cases it seems as though you're forced into writing a pointless method to get the synchronization correct. Am I missing something?

Aucun commentaire:

Enregistrer un commentaire