博主将会针对Java面试题写一组文章,包括J2ee,SQL分段锁,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注。一起学习,一起成长。

分段锁死前叉_分段锁_分段锁的实现原理

简介

锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 和 等 ) 。

Java锁的种类

公平锁/非公平锁

可重入锁

独享锁/共享锁

互斥锁/读写锁

乐观锁/悲观锁

分段锁

偏向锁/轻量级锁/重量级锁

自旋锁

上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释。

公平锁/非公平锁

公平锁是指多个线程按照申请锁的顺序来获取锁。

非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能分段锁,会造成优先级反转或者饥饿现象。

对于Java 而言,通过构造函数指定该锁是否是公平锁,默认是非公平锁。非公平锁的优点在于吞吐量比公平锁大。

对于而言,也是一种非公平锁。由于其并不像是通过AQS的来实现线程调度,所以并没有任何办法使其变成公平锁。

可重入锁

可重入锁又名递归锁,是指在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁。对于Java 而言, 其名字是Re Lock即是重新进入锁。对于而言,也是一个可重入锁。可重入锁的一个好处是可一定程度避免死锁

synchronized void setA() throws Exception{
 Thread.sleep(1000);
 setB();
}
synchronized void setB() throws Exception{
 Thread.sleep(1000);
}

上面的代码就是一个可重入锁的一个特点,如果不是可重入锁的话,setB可能不会被当前线程执行,可能造成死锁。

参考资料

分段锁的实现原理_分段锁死前叉_分段锁

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注