本文共 459 字,大约阅读时间需要 1 分钟。
编码过程中可采取的锁优化的思路有以下几种:
1、减少锁持有时间
例如:对一个方法加锁,不如对方法中需要同步的几行代码加锁;
2、减小锁粒度
例如:ConcurrentHashMap采取对segment加锁而不是整个map加锁,后来又对node加锁,提高并发性;
3、锁分离
根据同步操作的性质,把锁划分为的读锁和写锁,读锁之间不互斥,提高了并发性。
4、锁粗化
这看起来与思路1有冲突,其实不然。思路1是针对一个线程中只有个别地方需要同步,所以把锁加在同步的语句上而不是更大的范围,减少线程持有锁的时间;
而锁粗化是指:在一个间隔性地需要执行同步语句的线程中,如果在不连续的同步块间频繁加锁解锁是很耗性能的,因此把加锁范围扩大,把这些不连续的同步语句进行一次性加锁解锁。虽然线程持有锁的时间增加了,但是总体来说是优化了的。
5、锁消除
锁消除是编译器做的事:根据代码逃逸技术,如果判断到一段代码中,堆上的数据不会逃逸出当前线程(即不会影响线程空间外的数据),那么可以认为这段代码是线程安全的,不必要加锁。
转载地址:http://nwugn.baihongyu.com/