java并发编程实践 4.5 同步策略的文档化

缘起

《java并发编程实践》 4.5节

分析

SimpleDateFormat并不是一个线程安全的类.所以将它做为状态在线程之间进行共享的话是不安全的.

线程和并发这两个词汇从未出现在JDBC规范中. Servlet规范中出现的次数也是非常少.

ServletContex、HttpSession是属于Servlet的容器(如Tomcat),因为他们可能会被多个Servlet并发的访问(例如setAttribute、getAttribute),所以Servlet容器实现的厂商必须要线程安全的实现ServletContext和HTTPSession这两个对象.

Servlet本身属于Web应用.

往HttpSession、ServletContext中存储的对象属于Web应用程序本身. 他们可能被Servlet容器复制或者钝化, Web应用程序也可能对其进行操作,则这些对象的线程安全性应该由Web应用程序自己实现.

JDBC规范中并没有规定DataSource需要是线程安全的,但是多线程环境中,各个线程都需要从连接池中获取数据库连接. 多以DataSource虽然没有在JDBC规范中规定为线程安全的,但是如果它不是线程安全的话,那将是荒唐的~

JDBC规范同样没有规定Connection是线程安全的,而且实际中通过ThreadLocal手段也的确可以不是线程安全的.