「java锁分类」java 锁种类

博主:adminadmin 2023-03-17 17:10:09 351

今天给各位分享java锁分类的知识,其中也会对java 锁种类进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Java锁类型,如何为共用资源加锁?

private final Object genLock = new Object();

....

synchronized (genLock) {

try {

genLock.wait();

logger.info("线程被唤醒, 开始执行以下语句!");

} catch (InterruptedException e) { // 不会被中断

}

}

....要执行的语句

...唤醒

synchronized (genLock) {

genLock.notify();

}

Thread.yield();

continue;

在java中有哪些锁

给你整理了Java中的一些锁:

公平锁/非公平锁

可重入锁

独享锁/共享锁

互斥锁/读写锁

乐观锁/悲观锁

分段锁

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

自旋锁

上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计

谁用锁使用锁

为什么加锁?

面试中有很多时候会问到,为什么加锁?加锁是起到什么作用?

而实际上在我们的开发过程中会出现并发的情况,比如说两个人几乎同时点击了某一个按钮,这个时候就可以简单的理解成并发,那么到底谁先谁后? 程序中就很可能出现错误,当资源出现共享的时候,就会开始涉及到并发了,这个时候我们就可能会用到锁了,来锁住某一个资源,等我用过之后,你才能动。 这就是为什么使用锁。

锁的分类

公平锁/非公平锁

可重入锁

独享锁/共享锁

互斥锁/读写锁

乐观锁/悲观锁

分段锁

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

自旋锁

第一次分享,我们就先说这个公平锁和非公平锁。之后会在后序的文章中继续解析!

何为公平?何为非公平?在我们日常生活中的理解不就是对等的就是公平,不对等的就是不公平? 其实差不多的。

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

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

在JAVA的代码中什么是公平锁什么又是非公平的锁呢?

一种是使用Java自带的关键字synchronized对相应的类或者方法以及代码块进行加锁,

而另一种是ReentrantLock,前者只能是非公平锁,而后者是默认非公平但可实现公平的一把锁。

上面的类图看起来很不舒服,因为关于ReentrantLock这个锁,确实是没有很好的配图,我们可以自己画出来理解一下

我们先看非公平锁,我画图大家理解一下,就像公共厕所,不要嫌弃恶心,但是绝对容易理解

上面这幅图,加入说图中的管理员是Lock,然后现在A来了,说我要去厕所,这时候管理员一看,厕所没人,那好你进去把,然后A就进去了。

这个时候WC里面是有A的,正在进行式,这时候B来了,B也想去厕所

但是这个时候WC里面是有A的,然后管理员Lock看了一下,里面有人,排队把。。。

然后这B就得憋着,去进入队列去排队,然后又来了个C,这时候A还在里面,C只能也去排队,

就是这个样子的

这时候又过了一小会来了个D,也想去WC,这时候A恰好结束了,

这时候非公平锁就上场了,Lock管理员一看,里面没人,D你进去把,这时候就是这样的。

关于java锁分类和java 锁种类的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。