diff --git a/src/test/java/org/apache/commons/lang3/builder/ReflectionToStringBuilderConcurrencyTest.java b/src/test/java/org/apache/commons/lang3/builder/ReflectionToStringBuilderConcurrencyTest.java index 74ebc802c..e8e11bba2 100644 --- a/src/test/java/org/apache/commons/lang3/builder/ReflectionToStringBuilderConcurrencyTest.java +++ b/src/test/java/org/apache/commons/lang3/builder/ReflectionToStringBuilderConcurrencyTest.java @@ -81,7 +81,7 @@ public void testCopyOnWriteArrayList() throws InterruptedException, ExecutionExc } private void testConcurrency(final CollectionHolder> holder) throws InterruptedException, - ExecutionException { + ExecutionException { final List list = holder.collection; // make a big array that takes a long time to toString() for (int i = 0; i < DATA_SIZE; i++) { @@ -89,29 +89,32 @@ private void testConcurrency(final CollectionHolder> holder) throw } // Create a thread pool with two threads to cause the most contention on the underlying resource. final ExecutorService threadPool = Executors.newFixedThreadPool(2); - // Consumes toStrings - final Callable consumer = () -> { - for (int i = 0; i < REPEAT; i++) { - final String s = ReflectionToStringBuilder.toString(holder); - assertNotNull(s); + try { + // Consumes toStrings + final Callable consumer = () -> { + for (int i = 0; i < REPEAT; i++) { + final String s = ReflectionToStringBuilder.toString(holder); + assertNotNull(s); + } + return Integer.valueOf(REPEAT); + }; + // Produces changes in the list + final Callable producer = () -> { + for (int i = 0; i < DATA_SIZE; i++) { + list.remove(list.get(0)); + } + return Integer.valueOf(REPEAT); + }; + final Collection> tasks = new ArrayList<>(); + tasks.add(consumer); + tasks.add(producer); + final List> futures = threadPool.invokeAll(tasks); + for (final Future future : futures) { + assertEquals(REPEAT, future.get().intValue()); } - return Integer.valueOf(REPEAT); - }; - // Produces changes in the list - final Callable producer = () -> { - for (int i = 0; i < DATA_SIZE; i++) { - list.remove(list.get(0)); - } - return Integer.valueOf(REPEAT); - }; - final Collection> tasks = new ArrayList<>(); - tasks.add(consumer); - tasks.add(producer); - final List> futures = threadPool.invokeAll(tasks); - for (final Future future : futures) { - assertEquals(REPEAT, future.get().intValue()); + } finally { + threadPool.shutdown(); + threadPool.awaitTermination(1, TimeUnit.SECONDS); } - threadPool.shutdown(); - threadPool.awaitTermination(1, TimeUnit.SECONDS); } } diff --git a/src/test/java/org/apache/commons/lang3/builder/ToStringStyleConcurrencyTest.java b/src/test/java/org/apache/commons/lang3/builder/ToStringStyleConcurrencyTest.java index bed8b32c1..836a2993d 100644 --- a/src/test/java/org/apache/commons/lang3/builder/ToStringStyleConcurrencyTest.java +++ b/src/test/java/org/apache/commons/lang3/builder/ToStringStyleConcurrencyTest.java @@ -82,28 +82,31 @@ public void testCopyOnWriteArrayList() throws InterruptedException, ExecutionExc } private void testConcurrency(final CollectionHolder> holder) throws InterruptedException, - ExecutionException { + ExecutionException { final List list = holder.collection; // make a big array that takes a long time to toString() list.addAll(LIST); // Create a thread pool with two threads to cause the most contention on the underlying resource. final ExecutorService threadPool = Executors.newFixedThreadPool(2); - // Consumes toStrings - final Callable consumer = () -> { - for (int i = 0; i < REPEAT; i++) { - // Calls ToStringStyle - new ToStringBuilder(holder).append(holder.collection); + try { + // Consumes toStrings + final Callable consumer = () -> { + for (int i = 0; i < REPEAT; i++) { + // Calls ToStringStyle + new ToStringBuilder(holder).append(holder.collection); + } + return Integer.valueOf(REPEAT); + }; + final Collection> tasks = new ArrayList<>(); + tasks.add(consumer); + tasks.add(consumer); + final List> futures = threadPool.invokeAll(tasks); + for (final Future future : futures) { + future.get(); } - return Integer.valueOf(REPEAT); - }; - final Collection> tasks = new ArrayList<>(); - tasks.add(consumer); - tasks.add(consumer); - final List> futures = threadPool.invokeAll(tasks); - for (final Future future : futures) { - future.get(); + } finally { + threadPool.shutdown(); + threadPool.awaitTermination(1, TimeUnit.SECONDS); } - threadPool.shutdown(); - threadPool.awaitTermination(1, TimeUnit.SECONDS); } }