[ https://issues.apache.org/jira/browse/KYLIN-1563?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15231290#comment-15231290 ]
Ted Yu commented on KYLIN-1563: ------------------------------- Why would thread2 run into critical section ? It would return after the first 'if (initiated == true)' check. > Unsafe check of initiated in HybridInstance#init() > -------------------------------------------------- > > Key: KYLIN-1563 > URL: https://issues.apache.org/jira/browse/KYLIN-1563 > Project: Kylin > Issue Type: Bug > Reporter: Ted Yu > > {code} > private void init() { > if (initiated == true) > return; > synchronized (this) { > if (initiated == true) > return; > if (realizationEntries == null || realizationEntries.size() == 0) > throw new IllegalArgumentException(); > {code} > Suppose there are two threads executing the above code. > Thread1 uses the value read from field initiated in the condition initiated > == true. It sees that the condition is false. > Thread2 checks variable initiated, reading it after Thread1 assigns to > initiated but before some of the correlated field assignments take place. It > sees the condition initiated == true as being true. It continues on before > the critical section has completed, and can read data changed by that > critical section while it is in an inconsistent state. -- This message was sent by Atlassian JIRA (v6.3.4#6332)