ThreadLocal源码分析、使用场景、内存泄漏(二)

ThreadLocal有很多的使用场景.

1、在spring事务管理中,在service类中的涉及到事务的方法,每个事务的上下文都应该是独立拥有数据库的connection连接的,否则在数据提交回滚过程中就会产生冲突。

参考文章https://www.cnblogs.com/fishisnow/p/6396989.html

2、结合redis实现分布式锁。

参考文章https://www.jianshu.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中获取到。

总结,总之就是解决线程的同步问题。

你可能感兴趣的:(ThreadLocal源码分析、使用场景、内存泄漏(二))