synchronized和ReentrantLock区别是什么?
synchronized是和if、else、for、while一样的关键字,ReentrantLock是类,这是二者的本质区别。既然ReentrantLock是类,那么它就提供了比synchronized更多更灵活的特性,可以被继承、可以有方法、可以有各种各样的类变量。
很多人都说要慎用ThreadLocal,谈谈你的理解?
使用时需要注意以下几点:- 线程之间的threadLocal变量是互不影响的 - 使用private final static进行修饰,防止多实例时内存的泄露问题 - 线程池环境下使用后将threadLocal变量remove掉或设置成一个初始值
请谈谈 ThreadLocal 是怎么解决并发安全的?
而另外一种方式就是ThreadLocal方式,通过创建线程局部变量,以空间换时间的方式来让多线程并行执行。
ThreadLocal 是什么?有哪些使用场景?
原理:线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。但是在管理环境下(如 Web服务器)使用线程局部变量的时候要特别小心,在这种情况下,工作线程的生命周期比任何应用变量的生命周期都要长。
volatile关键字能否保证线程安全?
单纯使用 volatile 关键字是不能保证线程安全的 1. volatile 只提供了一种弱的同步机制,用来确保将变量的更新操作通知到其他线程 2. volatile 语义是禁用 CPU 缓存,直接从主内存读、写变量。表现为:更新 volatile 变量时,JMM 会把线程对应的本地内存中的共享变量值刷新到主内存中;