在多线程编程环境中,很多时候,我们希望在一个线程内,多层服务使用的某个对象是单例的,但是在不同的同级线程之间,该对象的实例又是不同的。此时我们常常会用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;
    }

 

posted on 2016-11-11 15:18  长江同学  阅读(138)  评论(0编辑  收藏  举报