公平锁和非公平锁
公平锁就是按照先来先服务、非公平就是不管你什么时候来,唤醒的时候都是随即唤醒。例如synchronize就是非公平锁,ReentrantLock既可以作为公平锁,也可以作为非公平锁。
可重入锁
可重入锁就是说某个线程已经获取到某个锁,这个线程跨域在次获取到这个锁而不会出现死锁。synchronize和ReentrantLock都是可重入锁。需要注意的是ReentrantLock锁需要手动释放锁、并且加锁次数要和释放次数一致。
好处:相同的线程可以访问这个对象,而不需要等待锁在我可以访问它之前被释放,从而降低了代码复杂性
[En]
Benefits: the same thread accesses this object without waiting for a lock to be released before I can access it, reducing code complexity
独享锁和共享锁
独享锁是指该锁一次只能被一个线程持有。共享锁指该锁可以由多个线程持有。synchronized和ReentrantLock都是独享锁。但是对于Lock的另一个实现类 ReadWriteLock
,其读锁是共享锁,其写锁是独享锁。
读锁可以保证并发读操作非常高效。独享锁与共享锁也是通过AQS来实现的。
独占锁:
独占锁是只有头节点获取锁,其余节点的线程继续等待,等待锁被释放后,才会唤醒下一个节点的线程。独占锁的同步状态state值在0和1之间切换,保证同一时间只能有一个线程是处于活动的,其他线程都被阻塞。 共享锁:
相关文章
「Java分享客栈」随时用随时翻:微服务链路追踪之zipkin搭建
前言 微服务治理方案中,链路追踪是必修课,SpringCloud的组件其实使用很简单,生产环境中真正令人头疼的往往是软件维护,接口在微服务间的调用究竟哪个环节出现了问题,哪个环节耗时较长,这都是项目上...
MongoDB 简介
Failure will never overtake me if my determination to succeed is strong enough. 只要我成功的决心足够强,失败就永远不会打...
常见的开源 License
目录 什么是开源软件 什么是 license 商业许可证与开源许可证 对开发者的影响 开源许可证的类型 如何选择开源许可证 什么是开源软件 开源软件。假设有一天,我觉得代码的能力很好,我写了一个小工具...
迭代器Iterator
迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃...
CentOS-Docker部署collabora office实现文档在线浏览
0 关于Collabora Online 实现网页中文档在线浏览和操作 Collabora Online官方文档:https://www.collaboraoffice.com/code/docker...
Maven-私服搭建与配置
一、maven私服搭建 1.下载地址 https://help.sonatype.com/repomanager3/product-information/download/download-arch...
我觉得 MQ 无用的理由
不喜欢用 MQ。 如果是同一个系统内的不同模块,可以用数据库表,来传递消息; 如果是不同系统间数据接口,可以用 webservice(同步,现在好像是 gRPC 有点热)、SFTP/FTP协议(异步)...
从零玩转第三方登录之QQ登录
从零玩转第三方登录之QQ登录 前言 在实际连接之前,让我们谈谈后台方案设计。由于它连接到第三方登录,因此保存用户信息是不可避免的。首先需要明确用户成功登录第三方后,[En]Before the act...
【一知半解】synchronied
synchronized是什么 synchronized是java同步锁,同一时刻多个线程对同一资源进行修改时,能够保证同一时刻只有一个线程获取到资源并对其进行修改,因此保证了线程安全性。 synch...
mybatis中使用limit实现分页
1.写UserMapper接口 //实现分页查询 List SelectAllUserLimit(Map map); 2.将接口映射到UserMapper.xml中 select id,name as...
feignclient各种使用技巧说明
常规的FeignClient的创建与使用我相信只要使用过spring cloud全家桶的套件的基本上都是非常熟悉了,我们只需定义一个interface,然后定义相关的远程接口方法签名及在方法上标记相关...
Mybatis框架入门
首先,先说一下写这个入门程序的需求与开发步骤: 那前三步就不说了有一些基础就可以办到 写入配置文件时,主要写入两种类型的配置文件。第一种类型是主配置文件,它管理与接口对应的其他配置文件。[En]Whe...
在web.xml配置springmvc过滤器解决乱码
代码: ``` characterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-...