锁优化的思路和方法

  • 减少锁持有时间
	public synchronized void syncMethod() {
		othercode1();
		mutextMethod();
		othercode2();
	}
	public void syncMethod() {
		othercode1();
              synchronized mutextMethod();
othercode2();}


  • 减小锁粒度

    将大对象,拆成小对象,大大增加并行度,降低锁竞争偏向锁,轻量级锁成功率提高
 ConcurrentHashMap

 HashMap的同步实现
Collections.synchronizedMap(Map m)返回SynchronizedMap对象

public V get(Object key) {
		synchronized (mutex) {
			return m.get(key);
		}
	}

	public V put(K key, V value) {
		synchronized (mutex) {
			return m.put(key, value);
		}
	}

ConcurrentHashMap

若干个Segment :Segment[] segments

Segment中维护HashEntry

put操作时
先定位到Segment,锁定一个Segment,执行put

在减小锁粒度后, ConcurrentHashMap允许若干个线程同时进入



  • 锁分离

根据功能进行锁分离

ReadWriteLock
读多写少的情况,可以提高性能


读锁

写锁

读锁

可访问

不可访问

写锁

不可访问

不可访问


读写分离思想可以延伸,只要操作互不影响,锁就可以分离

LinkedBlockingQueue

队列

链表


锁优化的思路和方法_第1张图片A

  • 锁粗化
锁优化的思路和方法_第2张图片


  • 锁消除

锁优化的思路和方法_第3张图片 锁优化的思路和方法_第4张图片

你可能感兴趣的:(高并发)