You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Waldemar Maier (JIRA)" <ji...@apache.org> on 2015/06/10 22:08:00 UTC

[jira] [Created] (LANG-1144) Multiple calls of org.apache.commons.lang3.concurrent.LazyInitializer.initialize()

Waldemar Maier created LANG-1144:
------------------------------------

             Summary: Multiple calls of org.apache.commons.lang3.concurrent.LazyInitializer.initialize()
                 Key: LANG-1144
                 URL: https://issues.apache.org/jira/browse/LANG-1144
             Project: Commons Lang
          Issue Type: Bug
          Components: lang.concurrent.*
    Affects Versions: 3.4
         Environment: Java 1.8 on Windows 7 x64
            Reporter: Waldemar Maier
            Priority: Critical


It is possible to create a construct, that allows multiple calls of LazyInitializer.initialize, when calculations (which can be very expensive) return null as result. 
The Junit Test can be somthing like this:
{code:java}
package edu.test;

import static org.junit.Assert.assertEquals;

import org.apache.commons.lang3.concurrent.ConcurrentException;
import org.apache.commons.lang3.concurrent.LazyInitializer;
import org.junit.Test;

public class LazyInitializerTest {

  private int lazyinitCounter = 0;

  private LazyInitializer<Object> lazyIinit = new LazyInitializer<Object>() {

    @Override
    protected Object initialize() throws ConcurrentException {
      lazyinitCounter++;
      return doSomeVeryExpensiveOperations();
    }
  };
  
  
  private Object doSomeVeryExpensiveOperations() {
    // do db calls
    // do some complex math calculations
    // the result of them all is null
    return null;
  }
  
  
  @Test
  public void testInitialization() throws Exception {
    lazyIinit.get();
    lazyIinit.get();
    assertEquals("Multiple call of LazyInitializer#initialize", 1, lazyinitCounter);
  }

}


{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)