Nicolas Vervelle wrote:
>Bob Hanson wrote:
>
>
>>pps. The following is more elegant and also works:
>>
>> static Boolean[] testInit = new Boolean[1];
>> private void initialize() {
>> if (testInit[0] != null) {
>> while (!testInit[0].booleanValue()) {
>> try{
>> Thread.sleep(10);
>> } catch(Exception e) {
>> System.out.println("geodesic constructor error "+e);
>> }
>> }
>> return;
>> }
>> testInit[0] = Boolean.FALSE;
>>...
>> System.out.println("geodesic initialization completed");
>> testInit[0] = Boolean.TRUE;
>> }
>>
>>It takes advantage of the fact that static testInit[0] has THREE
>>possible values: null, false, and true.
>>This is what I'm going with for now.
>>
>>
>>
>
>That won't work in every situation :
>- thread 1 executes "if (testInit[0] != null)" and finds that it evals
>to false
>
>
No, you are wrong, I think Thread 1 evaluates it as "null". guaranteed.
That's a "Boolean" not "boolean".
>- thread 2 executes "if (testInit[1] != null)" and finds that it evals
>to false also
>- thread 1 goes on
>- thread 2 goes on
>
>You could try using a synchronization on a variable.
>
>Check on the web for the Singleton pattern and multi-threading problems,
>I think solutions for it will also work for your problem.
>
>
>Nico
>
>
>
>
>_______________________________________________
>Jmol-developers mailing list
>[email protected]
>https://lists.sourceforge.net/lists/listinfo/jmol-developers
>
>
_______________________________________________
Jmol-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jmol-developers