[
https://issues.apache.org/jira/browse/LANG-1611?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17264566#comment-17264566
]
Andrey Fadeev edited comment on LANG-1611 at 1/14/21, 10:51 AM:
----------------------------------------------------------------
If there's only one token for an {{Initializer}} instance, why not trigger
initialization simply by calling the {{get()}} method, like in the
{{AtomicInitializer}} but using check for expiration instead of a {{null}}
check?
{code:java}
@Override
public T get() throws ConcurrentException {
T result = reference.get();
if (result == null) {
result = initialize();
if (!reference.compareAndSet(null, result)) {
// another thread has initialized the reference
result = reference.get();
}
}
return result;
}{code}
was (Author: andrey fadeev):
If there's only one token for an {{Initializer}} instance, why not trigger
initialization simply by calling the {{get()}} method, like in the
{{AtomicInitializer,}} but using check for expiration instead of a {{null}}?
{code:java}
@Override
public T get() throws ConcurrentException {
T result = reference.get();
if (result == null) {
result = initialize();
if (!reference.compareAndSet(null, result)) {
// another thread has initialized the reference
result = reference.get();
}
}
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)