TLS技术:
同一全局变量或者静态变量每个线程访问的是同一变量,多个线程同时访存同一全局变量或者静态变量时会导致冲突,尤其是多个线程同时需要修改这一变量时。
通过TLS机制,为每一个使用该全局变量的线程都提供一个变量值的副本,每一个线程均可以独立地改变自己的副本,而不会和其它线程的副本冲突。
1.解决多线程中的对同一变量的访问冲突的一种技术;
2.TLS会为每一个线程维护一个和该线程绑定的变量的副本;
3.Java平台的java.lang.ThreadLocal是TLS技术的一种实现;
ThreadLocal:
ThreadLocal存放的值是线程封闭,线程间互斥;
ThreadLocal是采用哈希表的方式来为每个线程都提供一个变量的副本;主要用于线程内共享一些数据,避免通过参数来传递;
ThreadLocal保证各个线程间数据安全,每个线程的数据不会被另外线程访问和破坏;Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离;
ThreadLocal与Thread,Runnable没有啥关系
ThreadLocal的使用场景:
数据库连接:在多线程中,如果使用懒汉式的单例模式创建Connection对象,由于该对象是共享的,那么必须要使用同步方法保证线程安全,这样当一个线程在连接数据库时,那么另外一个线程只能等待。这样就造成性能降低。如果改为哪里要连接数据库就来进行连接,那么就会频繁的对数据库进行连接,性能还是不高。这时使用ThreadLocal就可以既可以保证线程安全又可以让性能不会太低。但是ThreadLocal的缺点时占用了较多的空间。