廖雪峰
资深软件开发工程师,业余马拉松选手。
资深软件开发工程师,业余马拉松选手。
从Java 5开始,引入了一个高级的处理并发的包,它提供了大量更高级的并发功能,能大大简化多线程程序的编写。
我们知道Java语言直接提供了关键字用于加锁,但这种锁一是很重,二是获取时必须一直等待,没有额外的尝试机制。
包提供的用于替代加锁,我们来看一下传统的代码:
如果用替代,可以把代码改造为:
因为是Java语言层面提供的语法,所以我们不需要考虑异常,而是Java代码实现的锁,我们就必须先获取锁,然后在中正确释放锁。
顾名思义,是可重入锁,它和一样,一个线程可以多次获取同一个锁。
和不同的是,可以尝试获取锁:
上述代码在尝试获取锁的时候,最多等待1秒。如果1秒后仍未获取到锁,返回,程序就可以做一些额外处理,而不是无限等待下去。
所以,使用比直接使用更安全,线程在失败的时候不会导致死锁。
可以替代进行同步;
获取锁更安全;
必须先获取到锁,再进入代码块,最后使用保证释放锁;
可以使用尝试获取锁。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/18100.html