课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
锁的应用在java编程开发项目中还是比较频繁的,而今天我们就通过案例分析来了解一下,java编程开发常见锁的类型都有哪些。
公平锁和非公平锁
ReentrantLock可以指定构造函数的boolean类型得到公平或非公平锁,默认是非公平锁,synchronized也是非公平锁。
公平锁是多个线程按照申请锁的顺序获取锁,是FIFO的。并发环境中,每个线程在获取锁时先查看锁维护的等待队列,为空则战友,否则加入队列。
非公平锁是指多个线程不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。高并发情况下可能导致优先级反转或者饥饿现象。并发环境中,上来尝试占有锁,尝试失败,再加入等待队列。
可重入锁(递归锁)
可冲入锁指的是同一线程外层函数获取锁之后,内层递归函数自动获取锁。也就是线程能进入任何一个它已经拥有的锁所同步着的代码块。
ReentrantLock和synchronized都是可重入锁。
可重入锁大的作用用来避免死锁。
自旋锁
自旋锁是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式尝试获取锁。好处是减少线程上下文切换的消耗,缺点是循环时会消耗CPU资源。
读写锁
独占锁:该锁一次只能被一个线程持有,如ReentrantLock和synchronized。
共享锁:该锁可以被多个线程持有。
ReentrantReadWriteLock中,读锁是共享锁,写锁时独占锁。读读共享保证并发性,读写互斥。
希望这辈子,最让你无悔的事情就是来达内学习!学习向来不是件易事,但无论过程多么艰难,希望你依然热爱生活,热爱学习!永远记得,达内将与你一同前行!现在扫码,立即领取万元课程礼包,助力0基础快速入行,为你梳理行业必备技能,全方位了解岗位发展前景!
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。