java并发编程
文章平均质量分 88
Andanc
这个作者很懒,什么都没留下…
展开
-
读写锁(ReentrantReadWriteLock)
前言 在了解读写锁时,我们首先要明白什么是排他锁?在另个博客写有关于重入锁的测试,关于重入锁这些其实都属于排他锁,什么是排他锁呢?这种锁呢在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。 除了保证写操作对读操作的可见性以及并发性的提升之外,读写锁能够简化读写交互场景的编程方式。假设在程序中定义了一个共享的用作缓存数据结构,它原创 2021-07-25 19:26:51 · 1213 阅读 · 0 评论 -
java重入锁(ReentrantLock)学习
重入锁 重入锁ReentrantLock,顾名思义,就是支持重进入的锁,他表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁还支持获取锁时的公平和非公平选择。 ReentrantLock虽然没能像synchronized关键字一样支持隐式的重进入,但是在调用lock()方法时,已经获取到锁的线程,能够再次调用lock()方法获取锁而不被阻塞。 这里提到一个锁获取公平性问题,如果在绝对时间上,先对锁进行获取的请求一定会先被满足,那么这个锁是公平的,反之则是不公平的,公平的获取锁,也就是等待的时原创 2021-07-19 23:56:33 · 1870 阅读 · 0 评论 -
Lock锁
一、什么是Lock?lock接口是java里面的锁,锁一般是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程之间同时访问共享资源(除了读写锁)在javaSE5之前,java程序阻止多个线程之间同时访问共享线程是通过synchronized来进行实现的,而现在则在并发包中新增了Lock接口,以及相关的实现类,用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式的获取和释放锁,虽然它缺少了隐式获取/释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、原创 2021-07-18 13:50:58 · 420 阅读 · 0 评论 -
等待/通知机制
前言一个线程如果修改了一个对象的值,而另一个线程感知到了变化的话,就会进行相应的操作,整个过程开始于一个线程,而最终执行又是另外一个线程,前者是生产者,后者则是消费者,这种模式隔离了"做什么"vs"怎么做",在功能层面上实现了解耦,体系结构上具备了良好的伸缩性,但是在java中如何实现类似的功能?例一简单的办法就是让消费者线程不断的去循环检查变量是否符合预期,如下面伪代码所示,在while循环中设置不满足的条件,如果条件满足则退出while循环,从而完成消费者的工作while(value!=desi原创 2021-06-20 15:19:56 · 190 阅读 · 0 评论