diff --git a/src/java/org/apache/cassandra/db/marshal/DateType.java b/src/java/org/apache/cassandra/db/marshal/DateType.java index 359ce52bad..82ed876225 100644 --- a/src/java/org/apache/cassandra/db/marshal/DateType.java +++ b/src/java/org/apache/cassandra/db/marshal/DateType.java @@ -82,7 +82,7 @@ public class DateType extends AbstractType @Override public String toJSONString(ByteBuffer buffer, int protocolVersion) { - return '"' + TimestampSerializer.TO_JSON_FORMAT.format(TimestampSerializer.instance.deserialize(buffer)) + '"'; + return '"' + TimestampSerializer.getJsonDateFormatter().format(TimestampSerializer.instance.deserialize(buffer)) + '"'; } @Override diff --git a/src/java/org/apache/cassandra/db/marshal/TimestampType.java b/src/java/org/apache/cassandra/db/marshal/TimestampType.java index b01651dbdb..1704362abf 100644 --- a/src/java/org/apache/cassandra/db/marshal/TimestampType.java +++ b/src/java/org/apache/cassandra/db/marshal/TimestampType.java @@ -90,7 +90,7 @@ public class TimestampType extends AbstractType @Override public String toJSONString(ByteBuffer buffer, int protocolVersion) { - return '"' + TimestampSerializer.TO_JSON_FORMAT.format(TimestampSerializer.instance.deserialize(buffer)) + '"'; + return '"' + TimestampSerializer.getJsonDateFormatter().format(TimestampSerializer.instance.deserialize(buffer)) + '"'; } @Override diff --git a/src/java/org/apache/cassandra/serializers/TimestampSerializer.java b/src/java/org/apache/cassandra/serializers/TimestampSerializer.java index ab81fcc740..78ee7e73e7 100644 --- a/src/java/org/apache/cassandra/serializers/TimestampSerializer.java +++ b/src/java/org/apache/cassandra/serializers/TimestampSerializer.java @@ -96,8 +96,14 @@ public class TimestampSerializer implements TypeSerializer } }; - public static final SimpleDateFormat TO_JSON_FORMAT = new SimpleDateFormat(dateStringPatterns[15]); - + private static final ThreadLocal FORMATTER_TO_JSON = new ThreadLocal() + { + protected SimpleDateFormat initialValue() + { + return new SimpleDateFormat(dateStringPatterns[15]); + } + }; + public static final TimestampSerializer instance = new TimestampSerializer(); public Date deserialize(ByteBuffer bytes) @@ -138,6 +144,11 @@ public class TimestampSerializer implements TypeSerializer throw new MarshalException(String.format("Unable to coerce '%s' to a formatted date (long)", source), e1); } } + + public static SimpleDateFormat getJsonDateFormatter() + { + return FORMATTER_TO_JSON.get(); + } public void validate(ByteBuffer bytes) throws MarshalException {