Hello, I¹m working on Bug 49164 ( https://issues.apache.org/bugzilla/show_bug.cgi?id=49165)
Have a question: Any hidden reasons, why following construction was used for creating %t pattern?: private SimpleDateFormat dayFormatter = new SimpleDateFormat("dd"); private SimpleDateFormat monthFormatter = new SimpleDateFormat("MM"); private SimpleDateFormat yearFormatter = new SimpleDateFormat("yyyy"); private SimpleDateFormat timeFormatter = new SimpleDateFormat("HH:mm:ss"); ... StringBuilder current = new StringBuilder(32); current.append('['); current.append(struct.dayFormatter.format(date)); current.append('/'); current.append(lookup(struct.monthFormatter.format(date))); current.append('/'); current.append(struct.yearFormatter.format(date)); current.append(':'); current.append(struct.timeFormatter.format(date)); current.append(' '); current.append(getTimeZone(date)); current.append(']'); struct.currentDateString = current.toString(); Instead of this one: private SimpleDateFormat timeFormatter = new SimpleDateFormat("[dd/MMM/yyyy:HH:mm:ss]"); ... struct.currentDateString = struct.timeFormatter.format(date); I¹ve added one more test with this structure to org.apache.catalina.valves.Benchmarks and looks like the last solution the shortest and fastest option. Plus we can pass any pattern from configuration (#49165 enhancement intention): TimeDateElementBenchmarkTest_Sync: 5 threads and 10000000 iterations using Syncs took 3392ms TimeDateElementBenchmarkTest_Local: 5 threads and 10000000 iterations using ThreadLocals took 2551ms TimeDateElementBenchmarkTest_LocalStruct: 5 threads and 10000000 iterations using single ThreadLocal took 2237ms TimeDateElementBenchmarkTest_LocalStruct_SBuilder: 5 threads and 10000000 iterations using single ThreadLocal, with StringBuilder took 2196ms TimeDateElementBenchmarkTest_LocalStruct_SimpleDateFormat: 5 threads and 10000000 iterations using single ThreadLocal SimpleDateFormat took 2152ms P. S. My thanks to Mark Thomas for buglist to start.