[PATCH 1/1] Get rid of synchronization in java.util.logging.LogRecord constructor (original) (raw)
Martin Buchholz martinrb at google.com
Thu Mar 12 23:46:37 UTC 2009
- Previous message: [PATCH 1/1] Get rid of synchronization in java.util.logging.LogRecord constructor
- Next message: [PATCH 1/1] Get rid of synchronization in java.util.logging.LogRecord constructor
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
This looks fine, as long as there is no dependency of the implementation on the two atomic counters being incremented in concert, as seems likely.
Martin
On Thu, Mar 12, 2009 at 15:35, David M. Lloyd <david.lloyd at redhat.com> wrote:
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 threadIds = new ThreadLocal(); + private static final AtomicLong globalSequenceNumber = new AtomicLong(); + private static final AtomicInteger nextThreadId = new AtomicInteger(10); + private static final ThreadLocal threadIds = new ThreadLocal(); /** * @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; } 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 threadIds = new ThreadLocal(); + private static final AtomicLong globalSequenceNumber = new AtomicLong(); + private static final AtomicInteger nextThreadId = new AtomicInteger(10); + private static final ThreadLocal threadIds = new ThreadLocal(); /** * @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; }
- Previous message: [PATCH 1/1] Get rid of synchronization in java.util.logging.LogRecord constructor
- Next message: [PATCH 1/1] Get rid of synchronization in java.util.logging.LogRecord constructor
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]