线程基础知识15-StampedLock
摘要:1 简介 StampedLock是JDK1.8中新增的一个读写锁,也是对JDK1.5中的读写锁ReentrantReadWriteLock的优化。在原先读写锁的基础上新增了一种叫乐观读(Optimistic Reading)的模式。该模式并不会加锁,所以不会阻塞线程,会有更高的吞吐量和更高的性能。
阅读全文
线程基础知识14 ReentrantLock和ReentrantReadWriteLock
摘要:1 简介 ReentrantLock和ReentrantReadWriteLock都是可重入锁。可重入锁,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁 ReentrantLock和ReentrantReadWriteLock都支持获取锁时的公平和非公平性选择。默认是非公平
阅读全文
线程基础知识13-死锁
摘要:1 死锁是什么 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程 2 死锁演示 public class SiSuoTest { public
阅读全文
线程基础知识11-原子类
摘要:1 简介 java中提供了一些原子类,原子类包装了一个变量,并且提供了一系列对变量进行原子性操作的方法。我们在多线程环境下对这些原子类进行操作时,不需要加锁,大大简化了并发编程的开发。 目前Java中提供的原子类大部分底层使用了CAS锁(CompareAndSet自旋锁),如AtomicIntege
阅读全文
线程基础知识10-volatile
摘要:1 简介 Volatile保证了可见性和有序性,没有保证原子性。 1.1 保证可见性简介 可见性就是指当一个线程修改了共享变量的值时,其他线程能够立即得知这个修改。volatile变量做到了这一点。 Java内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值这种依赖主内存作
阅读全文