[ https://issues.apache.org/jira/browse/LANG-1611?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17265659#comment-17265659 ]
Andrey Fadeev edited comment on LANG-1611 at 1/15/21, 3:28 AM: --------------------------------------------------------------- Perhaps, you should use synchronization like in the {{LazyInitializer:}} {code:java} @Override public T get() throws ConcurrentException { // use a temporary variable to reduce the number of reads of the // volatile field T result = object; if (result == NO_INIT) { synchronized (this) { result = object; if (result == NO_INIT) { object = result = initialize(); } } } return result; } {code} was (Author: andrey fadeev): Perhaps, you should use synchronization like in the {{LazyInitializer:}} {code:java} @Override public T get() throws ConcurrentException { // use a temporary variable to reduce the number of reads of the // volatile field T result = object; if (result == NO_INIT) { synchronized (this) { result = object; if (result == NO_INIT) { object = result = initialize(); } } } return result; } {code} > Add an initializer which can compare and re-initialize value > ------------------------------------------------------------ > > Key: LANG-1611 > URL: https://issues.apache.org/jira/browse/LANG-1611 > Project: Commons Lang > Issue Type: New Feature > Components: lang.concurrent.* > Reporter: Franz Wong > Priority: Minor > > I would like to have a new class which is similar to > {{AtomicSafeInitializer}}. But we can compare and re-initialize the value. > The use case is to refresh access token (e.g. OAuth) when it expires. > Multiple threads tries to refresh the same token at the same time, but there > should be only one thread to do it, in addition, only the thread which passes > the expired token can trigger the initialization. -- This message was sent by Atlassian Jira (v8.3.4#803005)