[PATCH 1/1] Get rid of synchronization in java.util.logging.LogRecord constructor
David M. Lloyd
david.lloyd at redhat.com
Thu Mar 12 22:35:53 UTC 2009
Switch to atomic ops for the various sequence numbers, as opposed to
synchronizing on the class object on every object construction.
- DML
--
diff -r dde3fe2e8164 src/share/classes/java/util/logging/LogRecord.java
--- a/src/share/classes/java/util/logging/LogRecord.java Wed Feb 25
14:32:01 2009 +0000
+++ b/src/share/classes/java/util/logging/LogRecord.java Thu Mar 12
17:12:22 2009 -0500
@@ -25,6 +25,8 @@
package java.util.logging;
import java.util.*;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.AtomicInteger;
import java.io.*;
/**
@@ -64,9 +66,9 @@
*/
public class LogRecord implements java.io.Serializable {
- private static long globalSequenceNumber;
- private static int nextThreadId=10;
- private static ThreadLocal<Integer> threadIds = new
ThreadLocal<Integer>();
+ private static final AtomicLong globalSequenceNumber = new AtomicLong();
+ private static final AtomicInteger nextThreadId = new AtomicInteger(10);
+ private static final ThreadLocal<Integer> threadIds = new
ThreadLocal<Integer>();
/**
* @serial Logging message level
@@ -144,15 +146,13 @@
this.level = level;
message = msg;
// Assign a thread ID and a unique sequence number.
- synchronized (LogRecord.class) {
- sequenceNumber = globalSequenceNumber++;
- Integer id = threadIds.get();
- if (id == null) {
- id = new Integer(nextThreadId++);
- threadIds.set(id);
- }
- threadID = id.intValue();
+ sequenceNumber = globalSequenceNumber.getAndIncrement();
+ Integer id = threadIds.get();
+ if (id == null) {
+ id = Integer.valueOf(nextThreadId.getAndIncrement());
+ threadIds.set(id);
}
+ threadID = id.intValue();
millis = System.currentTimeMillis();
needToInferCaller = true;
}
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: LogRecord.patch
URL: <http://mail.openjdk.java.net/pipermail/core-libs-dev/attachments/20090312/657e3bff/LogRecord.patch>
More information about the core-libs-dev
mailing list