Monkey部落,分享技术、经验、遇到的问题及解决方法,欢迎大家互相讨论分享。
ThreadLocal的底层原理ThreadLocal是Java中所提供的线程本地存储机制,可以利用该机制的将数据缓存在某个线程内部,该线程在任意时刻、任意方法中获取缓存的数据。ThreadLocal底层是通过ThreadLocalMap来实现的,每个Thread对象(注意不是ThreadLocal
Sychronized和ReentrantLock的区别sychronized是一个关键字,ReentrantLock是一个类sychronized会自动的加锁和释放锁,ReentrantLock需要程序员手动加锁和释放锁sychronized的底层是JVM层面的锁,ReentrantLock是AP
CAS的原理CAS(compare and swap) 是一种乐观的并发控制机制,它的核心原理是基于硬件层面的原子性保证。CAS操作包含三个操作数:内存位置(V)、预期原值(A)、新值(B)。工作原理:在将新值写入内存之前,CAS操作会先比较内存位置的值是否与预期原值想匹配。如果内存位置的值与预期原
CAS ABA问题描述多个线程对某一个原子类进行操作时,某个线程将原值A改成了B,又改回了A,此时另一个线程也对该值进行操作,发现值仍然是A,就会认为它没有被修改过,从而执行CAS操作,但是此时A并不是原来的A,这个就是ABA问题。解决使用版本号或者时间戳来表示数据的变化,JUC包中AtomicSt
Synchronized的偏向锁、轻量级锁、重量级锁偏向锁:在锁对象的对象头中记录一下当前获取到的该锁的线程ID,该线程下次如果又来获取该锁就可以直接获取到了。轻量级锁:由偏向锁升级而来,当一个线程获取到锁之后,此时这把锁时偏向锁,此时如果有第二个线程来竞争锁,偏向锁就会升级为轻量级锁,之所以叫轻量