9
同步访问SimpleDateFormat
SimpleDateFormat的Javadoc指出SimpleDateFormat没有同步。 “日期格式不同步。建议为每个线程创建单独的格式实例。如果多个线程同时访问一种格式,则必须在外部进行同步。” 但是,在多线程环境中使用SimpleDateFormat实例的最佳方法是什么。这是我想到的一些选项,我过去曾使用过选项1和2,但是我很想知道是否有更好的选择,或者这些选项中的哪一个可以提供最佳的性能和并发性。 选项1:在需要时创建本地实例 public String formatDate(Date d) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(d); } 选项2:将SimpleDateFormat的实例创建为类变量,但同步对其的访问。 private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); public String formatDate(Date d) { synchronized(sdf) { return sdf.format(d); } } 选项3:创建一个ThreadLocal来为每个线程存储一个不同的SimpleDateFormat实例。 private ThreadLocal<SimpleDateFormat> tl = new ThreadLocal<SimpleDateFormat>(); public String formatDate(Date d) { SimpleDateFormat sdf = …