JAVA锁
DogDogChild
我的CSDN我醉牛皮
展开
-
HashSet如何保证不重复
HashSet内部的数据结构是一个哈希表,它通过键值对的方式去存储数据,底层实际上是维护了一个HashMap,因为HashMap中的key是不可重复的。两个对象的hashcode相等的情况下,equals方法不一定相等,但是如果equals方法相等的情况下,两个对象的hashcode一定是相等的。这里可以理解为不同对象可能会产生相同的hashcode,但是相同对象的hashcode一定是相同的。在java的集合中,判断两个对象是否相等的规则是: 1.判断两个对象得到hashcode(...原创 2021-02-27 10:11:29 · 694 阅读 · 0 评论 -
synchronized实现底层原理
synchronized 为java的关键字,通过synchronized修饰的对象,方法或者成员变量可以保证在多线程访问下数据依然保持正确synchronized 可以保证数据的原子性,有序性,以及可见性原子性:synchronized可保证代码块执行时的原子操作有序性:当一个线程获取到该代码块的数据时,其他线程不能够获取到,只能在队列中等待或者自旋可见性:在线程内存中对数据进行修改了以后,会主动通知主线程更新数据(主要底层汇编是通过lock 指令实现的)实现原理:syn.原创 2021-01-31 11:10:20 · 141 阅读 · 0 评论 -
悲观锁与乐观锁
悲观锁:在获取锁以后只允许获取锁的那一个对象或事务来操作数据(除了查询不需要获取锁),只有当当前对象或事务操作完以后释放锁以后,其他对象或事务才能对数据进行操作。优点:悲观锁利用锁机制来保证程序的顺序执行。缺点:当一个事务获取锁时,其他事务除了查询不能对当前数据进行操作。当获取锁的事务对数据操作时间较长时,其他事务需要等待,造成吞吐量下降。应用场景:当对数据库进行大量...原创 2019-08-13 14:56:52 · 109 阅读 · 0 评论 -
公平锁与非公平锁
ReentrantLock实现了Lock接口,在加锁和解锁时都要显示的写出,当构造ReentrantLock传入的参数为false的时候为非公平锁,当构造ReentrantLock传入参数为true的时候为公平锁。//创建一个非公平锁,默认是非公平锁Lock nonFairLock= new ReentrantLock();Lock nonFairLock= new Ree...原创 2019-08-13 15:30:36 · 124 阅读 · 0 评论 -
可重入锁与不可重入锁
当一个线程获得当前实例的锁lock,并且进入了方法A,该线程在方法A没有释放该锁的时候,是否可以再次进入使用该锁的方法B?不可重入锁:在方法A释放锁之前,不可以再次进入方法B可重入锁:在方法A释放该锁之前可以再次进入方法B不可重入锁:当线程在访问A方法的时候,获取的A方法的锁,在A方法锁释放之前不能够访问其他方法的锁。个人理解模型:{}{}{}{}{}。可重入锁:...原创 2019-08-13 15:53:00 · 281 阅读 · 0 评论 -
独享锁与共享锁
独享锁:是指该锁只能同时被一个线程持有。共享锁:是只该所可以同时被多个线程持有。对于ReentrantLock而言,ReentrantLock是一个独享锁,即公平锁与非公平锁时独享锁。而对ReadWriteLock而言,它的读是一个共享锁,而写是一个独享锁。读锁作为一个共享锁可以保证并发是的高可读性。独享锁,和共享锁都是通过AQS来实现的,实现不同方法来实现独享,和共享...原创 2019-08-13 17:50:09 · 596 阅读 · 0 评论 -
脏读,幻读与不可重复读
脏读,是指事物A对数据修改以后没有提交,之前事物B对数据进行查询,查询到事物A修改的那一条数据,那条数据即为脏数据,B读取即为脏读。不可重复读,是指事物A在查询一条数据后没有提交,事物B对数据进行了update或者delete操作,然后事物A再一次查询的时候发现数据发生了变化。幻读,是指事物A在查询一条数据后没有提交,事物B对数据进行了insert操作,然后事物A再一次查询的时...原创 2019-08-14 10:49:18 · 291 阅读 · 0 评论