I would suggest to use ThreadLocal instead of overriding SimpleDateFormat. Something like this:
private static final ThreadLocal LOCAL_DATE_FORMAT = new ThreadLocal() { protected Object initialValue() { return new SimpleDateFormat("yyyyMMddHHmmss"); }; }; public static SimpleDateFormat getDateFormat() { return (SimpleDateFormat) LOCAL_DATE_FORMAT.get(); } On Tue, Aug 17, 2010 at 8:11 AM, Charles O'Farrell <charl...@gmail.com> wrote: > Hi Ivy Devs, > > Sorry to bother you, but we've run into some annoying issues with Ivy > and concurrency (using ant parallel). For some unbelievably stupid > reason SimpleDateFormat isn't thread safe. > > http://download-llnw.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html#synchronization > > Please find below a patch which illustrates one possible fix. I can > imagine you might want to do something completely different, this is > more of a show of good faith. Please let me know if you need me to > raise a Bug and/or submit a different patch. > > Cheers, > > Charles > > diff --git a/src/java/org/apache/ivy/Ivy.java > b/src/java/org/apache/ivy/Ivy.java > index 3d9d8cd..608b364 100644 > --- a/src/java/org/apache/ivy/Ivy.java > +++ b/src/java/org/apache/ivy/Ivy.java > @@ -24,6 +24,7 @@ import java.net.URL; > import java.text.ParseException; > import java.text.SimpleDateFormat; > import java.util.Collection; > +import java.util.Date; > import java.util.Iterator; > import java.util.List; > import java.util.Map; > @@ -129,8 +130,24 @@ public class Ivy { > > private static final int KILO = 1024; > > - public static final SimpleDateFormat DATE_FORMAT = new > SimpleDateFormat("yyyyMMddHHmmss"); > - > + public static final ThreadSafeDateFormat DATE_FORMAT = new > ThreadSafeDateFormat("yyyyMMddHHmmss"); > + > + public static class ThreadSafeDateFormat { > + private final String format; > + > + public ThreadSafeDateFormat(String format) { > + this.format = format; > + } > + > + public Date parse(String date) throws ParseException { > + return new SimpleDateFormat(format).parse(date); > + } > + > + public String format(Date date) { > + return new SimpleDateFormat(format).format(date); > + } > + } > + > /** > * the current version of Ivy, as displayed on the console when > * Ivy is initialized > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org > For additional commands, e-mail: dev-h...@ant.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org For additional commands, e-mail: dev-h...@ant.apache.org