ThreadLocal有很多的使用场景.
1、在spring事务管理中,在service类中的涉及到事务的方法,每个事务的上下文都应该是独立拥有数据库的connection连接的,否则在数据提交回滚过程中就会产生冲突。
参考文章https://www.cnblogs.com/fishisnow/p/6396989.html
2、结合redis实现分布式锁。
参考文章//www.greatytc.com/p/cadd53f063b9
3、解决数据库连接
private static ThreadLocal connectionHolder = new ThreadLocal() {
public Connection initialValue() { return DriverManager.getConnection(DB_URL); } };
public static Connection getConnection() { return connectionHolder.get(); }
4、有时候ThreadLocal也可以用来避免一些参数传递,通过ThreadLocal来访问对象
比如一个方法调用另一个方法时传入了8个参数,通过逐层调用到第N个方法,传入了其中一个参数,此时最后一个方法需要增加一个参数,第一个方法变成9个参数是自然的,但是这个时候,相关的方法都会受到牵连,使得代码变得臃肿不堪。这时候就可以将要添加的参数设置成线程本地变量,来避免参数传递。
在f1通过逐层调用f3方法,通过本地变量b可以在f3中获取到。
总结,总之就是解决线程的同步问题。