Re: user manual code example race condition
Pascal Bourguignon <[email protected]>
| Newsgroups | gmane.editors.j.devel |
|---|---|
| Message-ID | <F8D75D50-F8FB-4114-8AA6-5ED7A946CDF1__33402.014202305$1552317575$gmane$org@informatimago.com> |
> On 11 Mar 2019, at 10:59, Mark Evenson <[email protected]> wrote: > > > >> On Mar 11, 2019, at 06:38, dingd <[email protected]> wrote: >> >> this is recommended in the manual, it contains a race condition. >> >> Interpreter interpreter = Interpreter.getInstance (); >> if ( interpreter == null ) { >> interpreter = Interpreter.createInstance (); >> } >> >> getInstance and createInstance should be swapped. > > Since both Interpreter.getInstance() and Interpreter.createInstance() are > methods synchronized on the same object monitor, I don’t see that there is a > race condition here. Could you explain a little more about your reasoning > and/or experience with the race condition? Two threads could call getInstance and have interpreter=null. Then both will call createInstance, thus two instances will be created. If interpreter is a local binding as it appears in the code above, then it is what’s intended and all is good. But if interpreter is a global binding and you expected interpreter to have a single instance, then it’s wrong. -- __Pascal J. Bourguignon__