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)