当访问公共变量的时候就需要同步才能线程安全。线程封闭就可以免去同步操作就可以实现线程安全。
常见的应用场景:
在JDBC中的Connection对象并不是线程安全的。在典型的Servlet应用中,请求是同步的,请求直接使用用Connection对象访问数据库,使用完再返回给链接池给下一个请求使用,并且在链接返回之前不会给其他线程使用。
这种方式就叫做线程封闭技术
java里面推荐使用线程封闭方法有两种 栈封闭和ThreadLocal
栈封闭
java中方法和方法之间的变量(局部变量)是互相隔离的,当多个线程访问一个方法时只要这个方法操作只有局部变量那么就是线程安全的。
ThreadLocal
ThreadLocal可以看做一个是Map<Thread,T>的对象,当set的时候只有调用set的线程调用get才能得到value,因此每个线程直接是互不干扰的