On 1/29/14 8:50 PM, Tristan Yan wrote:
Looks like in you new webrev.  The wait will continue to go loop until
systemStub is not null. If it’s what you meant to do that?

Yes. In the previous webrev, systemStub started off as null and made a single transition to non-null. The boolean 'initialized' started off as false and made a single transition to true, at the same time. If you set aside the issue of systemStub being final (which I've removed in this webrev) these states are redundant. That is,

    systemStub == null    <==>    initialized == false
    systemStub != null    <==>    initialized == true

(Where <==> is read as "if and only if" meaning that the implication goes both ways.)

The while-loop in the old webrev was

    while (!initialized)

which is the same as

    while (initialized == false)

Therefore, the loop condition can be replaced with

    while (systemStub == null)

and the initialized field can be removed.

Restated in perhaps a more intuitive way, the bug was that lookup() sometimes returned null. So the condition on systemStub that we want to reach before returning from getSystemStub() is that systemStub be non-null. To do this we have to write the inverse of the condition in the while loop. Thus, we want systemStub to be non-null, so we have to keep waiting while it is null.

s'marks

Reply via email to