Synchronized VS Lock
两者都是可重入锁,synchronized依赖JVM(Monitor)实现;ReenTrantLock依赖JDK的API实现。自JDK1.6引入偏向锁的概念后,synchronized性能与ReentrantLock相差不大,甚至官方建议使用synchronized。
两者都是可重入锁,synchronized依赖JVM(Monitor)实现;ReenTrantLock依赖JDK的API实现。自JDK1.6引入偏向锁的概念后,synchronized性能与ReentrantLock相差不大,甚至官方建议使用synchronized。
ReentrantLock实现了Lock接口,核心是AQS,独享锁、支持公平锁和非公平锁两种模式。ReadWriteLock维护一对关联锁,一个用于只读操作,一个用于写入。
synchronized关键字用于保障原子性、可见性、有序性。基于对象监视器实现的锁,Java中每个对象都与一个监视器相关联,一个线程可以锁定或解锁,一次只有一个线程可以锁定监视器,试图锁定该监视器的其它线程都会被阻塞,直到它们可以获得该监视器上的锁定为止。
HashMap的源码解读,在日常开发中如果正确的使用HashMap。
AQS全称为AbstractQueuedSynchronizer,提供了对资源占用、释放,线程等待、唤醒等接口和具体实现。可以用在各种需要控制资源争用的场景,例如ReentrantLock、CountDownLatch、Semphore中。
JMM全称Java Memory Model,Java内存模型是JSR133里指出了JMM是用来定义一个协议,用于屏蔽各种硬件和操作系统的内存访问差异,让Java程序在各种平台下都能达到一致的并发效果。
注解是JDK5.0 引入的一种注释机制,核心包是 java.lang.annotation ,下面有一个 Annotation接口,是所有注解都默认继承的(Javap .class可以看到继承关系)。
不推荐使用 stop、suspend、resume 这三个过期作废的方法,因为有可能会发生不可预料的结果而且出现错误后还比较难定位。大多数情况下,停止一个线程使用 Thread.interrupt() 方法,但是这个方法不会终止一个正在运行状态的线程,还需要加入一些判断才能完成停止线程。