r27129 - trunk/freenet/src/freenet/support
[email protected] Tue, 21 Apr 2009 06:05:06 +0000
| Newsgroups | gmane.network.freenet.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: j16sdiz
Date: 2009-04-21 06:05:06 +0000 (Tue, 21 Apr 2009)
New Revision: 27129
Modified:
trunk/freenet/src/freenet/support/PooledExecutor.java
Log:
Reduce synchronization: use AtomicLong
Modified: trunk/freenet/src/freenet/support/PooledExecutor.java
===================================================================
--- trunk/freenet/src/freenet/support/PooledExecutor.java 2009-04-21 06:04:43 UTC (rev 27128)
+++ trunk/freenet/src/freenet/support/PooledExecutor.java 2009-04-21 06:05:06 UTC (rev 27129)
@@ -4,6 +4,7 @@
package freenet.support;
import java.util.ArrayList;
+import java.util.concurrent.atomic.AtomicLong;
import freenet.node.PrioRunnable;
import freenet.node.Ticker;
@@ -23,7 +24,7 @@
@SuppressWarnings("unchecked")
private final ArrayList<MyThread>[] waitingThreads = new ArrayList[runningThreads.length];
private volatile int waitingThreadsCount;
- long[] threadCounter = new long[runningThreads.length];
+ AtomicLong[] threadCounter = new AtomicLong[runningThreads.length];
private long jobCount;
private long jobMisses;
private static boolean logMINOR;
@@ -38,7 +39,7 @@
for(int i = 0; i < runningThreads.length; i++) {
runningThreads[i] = new ArrayList<MyThread>();
waitingThreads[i] = new ArrayList<MyThread>();
- threadCounter[i] = 0;
+ threadCounter[i] = new AtomicLong();
}
waitingThreadsCount = 0;
}
@@ -85,13 +86,14 @@
// miss
if (miss) {
+ long threadNo = threadCounter[prio - 1].getAndIncrement();
+ // Will be coalesced by thread count listings if we use "@" or "for"
+ t = new MyThread("Pooled thread awaiting work @" + threadNo, job, threadNo, prio, !fromTicker);
+ t.setDaemon(true);
+ t.setName(jobName + "(" + threadNo + ")");
+
synchronized(this) {
- // Will be coalesced by thread count listings if we use "@" or "for"
- t = new MyThread("Pooled thread awaiting work @" + (threadCounter[prio - 1]), job, threadCounter[prio - 1], prio, !fromTicker);
- threadCounter[prio - 1]++;
runningThreads[prio - 1].add(t);
- t.setDaemon(true);
- t.setName(jobName + "(" + t.threadNo + ")");
jobMisses++;
if(logMINOR)