[
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)