关于Threadlocal

ThreadLocal类用于创建一个线程本地变量


在Thread中有一个成员变量ThreadLocals,该变量的类型是ThreadLocalMap,也就是一个Map,它的键是ThreadLocal,值就是变量的副本。通过ThreadLocal的get()方法可以获取该线程变量的本地副本,在get()方法之前要首先set(),否则就要重写initialValue()方法。


ThreadLocal的使用场景:

数据库连接:在多线程中,如果使用懒汉式的单例模式创建Connection对象,由于该对象是共享的,那么必须要使用同步方法保证线程安全,这样当一个线程在连接数据库时,那么另外的一个线程只能等待,这样就造成性能降低。如果改为哪里要连接数据库就来进行连接,那么就会频繁的对数据库进行连接,性能还是不高。这时使用ThreadLocal就可以既保证线程安全又可以让性能不会太低。但是ThreadLocal的缺点是占用了较多的空间。


ThreadLocal存放的值是线程封闭、线程间互斥的。


主要用于线程内共享一些数据,避免通过参数来传递。


ThreadLocal和多线程并发没有什么关系。


ThreadLocal模式是为了解决单线程内的跨类跨方法调用的。


ThreadLocal不是用来解决对象共享访问问题的,而只要是提供了保持对象的方法和避免参数传递的方便对象访问的方式。一般情况下,通过ThreadLocal.set()到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同对象。

你可能感兴趣的:(Java)