You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by tv...@apache.org on 2026/01/12 19:34:26 UTC

(turbine-fulcrum-pool) 03/06: Use CopyOnWriteArrayList

This is an automated email from the ASF dual-hosted git repository.

tv pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-pool.git

commit d43583f429c7624f690e1c1940931293bde1660b
Author: Thomas Vandahl <tv...@apache.org>
AuthorDate: Mon Jan 12 20:25:58 2026 +0100

    Use CopyOnWriteArrayList
---
 src/java/org/apache/fulcrum/pool/PoolBuffer.java | 38 +++++++++---------------
 1 file changed, 14 insertions(+), 24 deletions(-)

diff --git a/src/java/org/apache/fulcrum/pool/PoolBuffer.java b/src/java/org/apache/fulcrum/pool/PoolBuffer.java
index 08f1380..3c35d95 100644
--- a/src/java/org/apache/fulcrum/pool/PoolBuffer.java
+++ b/src/java/org/apache/fulcrum/pool/PoolBuffer.java
@@ -20,7 +20,7 @@ package org.apache.fulcrum.pool;
  */
 
 import java.lang.reflect.Method;
-import java.util.ArrayList;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.LinkedBlockingQueue;
 
 import org.apache.fulcrum.factory.FactoryService;
@@ -44,7 +44,7 @@ public class PoolBuffer
 	/**
 	 * A cache for recycling methods.
 	 */
-	private ArrayList<Recycler> recyclers;
+	private CopyOnWriteArrayList<Recycler> recyclers;
 
 	/**
 	 * The capacity initially set
@@ -60,6 +60,7 @@ public class PoolBuffer
 	{
 		this.pool = new LinkedBlockingQueue<>(capacity);
 		this.capacity = capacity;
+		this.recyclers = new CopyOnWriteArrayList<>();
 	}
 
 	/**
@@ -76,7 +77,6 @@ public class PoolBuffer
 	/**
 	 * Polls for an instance from the pool.
 	 *
-	 *
 	 * @param params         object parameters
 	 * @param signature      signature of the class
 	 * @param factoryService service to add
@@ -93,7 +93,7 @@ public class PoolBuffer
 			{
 				((ArrayCtorRecyclable) instance).recycle(params);
 			}
-			else if (instance instanceof Recyclable)
+			else if (instance instanceof Recyclable recyclable)
 			{
 				try
 				{
@@ -103,7 +103,8 @@ public class PoolBuffer
 						Method recycle = getRecycle(signature);
 						if (recycle == null)
 						{
-							synchronized (this) {
+							synchronized (this)
+							{
 								/* Make a synchronized recheck. */
 								recycle = getRecycle(signature);
 								if (recycle == null)
@@ -111,13 +112,7 @@ public class PoolBuffer
 									Class<? extends Object> clazz = instance.getClass();
 									recycle = clazz.getMethod("recycle",
 											factoryService.getSignature(clazz, params, signature));
-
-									@SuppressWarnings("unchecked")
-									ArrayList<Recycler> cache = recyclers != null
-											? (ArrayList<Recycler>) recyclers.clone()
-											: new ArrayList<Recycler>();
-									cache.add(new Recycler(recycle, signature));
-									recyclers = cache;
+									recyclers.add(new Recycler(recycle, signature));
 								}
 							}
 						}
@@ -125,7 +120,7 @@ public class PoolBuffer
 					}
 					else
 					{
-						((Recyclable) instance).recycle();
+						recyclable.recycle();
 					}
 				}
 				catch (Exception x)
@@ -187,18 +182,13 @@ public class PoolBuffer
 	 */
 	private Method getRecycle(String[] signature)
 	{
-		ArrayList<Recycler> cache = recyclers;
-		if (cache != null)
+		for (Recycler recycler : recyclers)
 		{
-			Method recycle;
-			for (Recycler recycler : cache)
-			{
-				recycle = recycler.match(signature);
-				if (recycle != null)
-                {
-                    return recycle;
-                }
-			}
+			Method recycle = recycler.match(signature);
+			if (recycle != null)
+            {
+                return recycle;
+            }
 		}
 		return null;
 	}