java多线程 ThreadLocal

本文介绍了ThreadLocal类的基本概念及其解决线程安全问题的方法。通过两个具体的应用案例,展示了如何利用ThreadLocal为每个线程提供独立的变量副本,从而避免了并发访问中的冲突。

类的含义

ThreadLocal是解决线程安全问题一个很好的思路,它通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题.

现阶段,未使用,理解即可.使用格式如下:

Case1

public class ConnectionManager {  
  
    private static ThreadLocal<Connection> connectionHolder = new ThreadLocal<Connection>() {
        @Override  
        protected Connection initialValue() {
            Connection conn = null;  
            try {  
                conn = DriverManager.getConnection(
                        "jdbc:mysql://localhost:3306/test", "username",
                        "password");
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return conn;
        }
    };
  
    public static Connection getConnection() {
        return connectionHolder.get();
    }  
  
    public static void setConnection(Connection conn) {
        connectionHolder.set(conn);
    }
}

Case2

public class ThreadLocalContext {

    private static ThreadLocal<Map<String, Object>> context = new ThreadLocal<Map<String, Object>>() {
        @Override
        protected Map<String, Object> initialValue() {
            return new HashMap<String, Object>();
        }
    };

    /**
     * 放入ThreadLocal的Context.
     */
    public static void put(String key, Object value) {
        context.get().put(key, value);
    }

    /**
     * 取出ThreadLocal的Context.
     */
    @SuppressWarnings("unchecked")
    public static <T> T get(String key) {
        return (T) (context.get().get(key));
    }

    /**
     * 清理ThreadLocal的Context内容.
     */
    public static void reset() {
        context.get().clear();
    }
}

转载于:https://my.oschina.net/u/3706181/blog/1593363

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值