在多线程编程环境中,很多时候,我们希望在一个线程内,多层服务使用的某个对象是单例的,但是在不同的同级线程之间,该对象的实例又是不同的。此时我们常常会用ThreadLocal去实现,下面用图来说明:
例如,在多线程环境下,数据库建立的连接,在单个线程中的多个服务之间我们可能希望只用一份连接,所以此时的Util链接方法可以如下编写:
private static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>(); /** * 改进版建立链接 * * @return */ public static Connection getConnection() { Connection conn = threadLocal.get(); try { if (conn == null) { conn = DriverManager.getConnection(URL, USER, PASS); threadLocal.set(conn); } } catch (SQLException e) { log.error("JDBCUtil:getConnection() error", e); } return conn; }