首页后端开发JAVAjava代码轻量级锁实现 java轻量化ide

java代码轻量级锁实现 java轻量化ide

时间2023-04-23 23:45:01发布访客分类JAVA浏览1125
导读:Java锁有哪些种类,以及区别 自旋锁 自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时 才能进入临界区。lock比synchronized比较如下:1 支持公平锁,某些场景下需要获得锁的时间与申请锁的时间...

Java锁有哪些种类,以及区别

自旋锁 自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时 才能进入临界区。

lock比synchronized比较如下:1) 支持公平锁,某些场景下需要获得锁的时间与申请锁的时间相一致,但是synchronized做不到 2) 支持中断处理,就是说那些持有锁的线程一直不释放,正在等待的线程可以放弃等待。

对于Java ReentrantLock而言,通过构造函数指定该锁是否是公平锁,默认是非公平锁。对于Synchronized而言,也是一种非公平锁。由于其并不像ReentrantLock是通过AQS的来实现线程调度,所以并没有任何办法使其变成公平锁。

乐观锁和悲观锁的区别如下:悲观锁是当线程拿到资源时,就对资源上锁,并在提交后,才释放锁资源,其他线程才能使用资源。

对于Java ReentrantLock而言,其是独享锁。但是对于Lock的另一个实现类ReadWriteLock,其读锁是共享锁,其写锁是独享锁。读锁的共享锁可保证并发读是非常高效的,读写,写读 ,写写的过程是互斥的。

Synchronize的实现原理

定义 原子操作:不可分割的操作,在原子操作执行完毕之前,其不会被任何其它任务或事件中断。

在Java5中,synchronize是性能低效的。因为这是一个重量级操作,需要调用操作接口,导致有可能加锁消耗的系统时间比加锁以外的操作还多。相比之下使用Java提供的Lock对象,性能更高一些。但是到了Java6,发生了变化。

原理:1)发送端首先发送一个带有SYN(synchronize)标志地数据包给接收方。2)接收方接收后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了。

(1)不存储键值对,仅存储对象;(2)不允许键/值为null;(3)线程安全(速度慢),采用synchronize关键字加锁原理(几乎在每个方法上都加锁),;(4)实现了Set接口,不允许集合中有重复的值。

既然volatile关键字已经实现了线程间数据同步,又要synchronized干什么呢?呵呵,它们之间有两点不同。

偏向锁、轻量级锁、重量级锁

偏向锁:无实际竞争,只有第一个申请锁的线程会使用锁 偏向锁会偏向第一个获得它的线程。当线程获取锁的时候,先检查Mark Word是否是可偏向锁的状态。

偏向锁/轻量级锁/重量级锁 这三种锁是指锁的状态,并且是针对Synchronized。在Java 5通过引入锁升级的机制来实现高效Synchronized。这三种锁的状态是通过对象监视器在对象头中的字段来表明的。

这三种锁效率从高到低:偏向锁,轻量级锁,重量级锁 重量级锁:使用的是linux的互斥量mutex实现。非常耗资源 轻量级锁(自旋锁):使用cas来实现锁。使用与线程交替访问资源的情况,可以减少mutex的使用。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: java代码轻量级锁实现 java轻量化ide
本文地址: https://pptw.com/jishu/6755.html
go语言编程交流圈教程 go语言网络编程 标签中嵌入java代码 java将标签添加到面板

游客 回复需填写必要信息