多线程状态下调用SimpleDateFormat.format()抛出 ArrayIndexOutOfBoundsException 异常
本来想在类的顶部设置一个 静态的SimpleDateFormat常量
public final static DateFormat dateFormatGMT = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z", Locale.ENGLISH);
供多个线程使用,但用了一个星期后,在今天晚上发现抛出两个异常。
当时的线程数应该在 30个左右。
我一直认为是线程安全的,但是今天抛出这个异常:
Exception in thread "Thread-91" Exception in thread "Thread-101" java.lang.ArrayIndexOutOfBoundsException: -2147483648
at java.text.SimpleDateFormat.subFormat(Unknown Source)
at java.text.SimpleDateFormat.format(Unknown Source)
at java.text.SimpleDateFormat.format(Unknown Source)
at java.text.DateFormat.format(Unknown Source)
at server.Task.run(Task.java:362)
我一时也不知哪里出了问题,搜索了一下,找到一个答案:
java.text.SimpleDateFormat 类不是线程安全的。
http://www.ibm.com/developerworks/cn/java/j-jtp09263/
最后只好把代码改了一下:
private DateFormat dateFormatGMT = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z", Locale.ENGLISH);
2009-10-15