java锁的分类
锁作为并发共享数据,保证一致性的工具。在java.util.lock中有一些不错的策略
1、自旋锁
2、阻塞锁
3、可重入锁
4、读写锁
5、互斥锁
6、悲观锁
7、乐观锁
8、公平锁
9、非公平锁
10、偏向锁
11、对象锁
12、线程锁
13、锁粗化
14、轻量级锁
15、锁消除
16、锁膨胀
17、信号量
竞争锁与无竞争锁的区别。如果一个线程尝试进入另一个线程正在执行的同步块或者方法时,便会出现锁竞争。第二个线程就必须等待前一个线程执行完这个同步块并释放掉监视器(monitor)。如果只有一个线程在执行这段同步的代码,这个锁就是无竞争的。JVM中的同步已经针对这种无竞争的情况进行了优化,对于绝大多数应用而言,无竞争的锁几乎是没有任何额外的开销的。因此,出了性能问题不能光怪锁,主要是竞争锁。
减少锁的竞争或者竞争的时间
实现线程安全最快的方法就是直接将整个方法上锁
class GameServer {
public Map<<String