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

Reply via email to