锁的API及多线程性能调优

锁的API及多线程性能调优

轮询锁

trylock方法尝试获取锁,如果获取了结果就是true,执行目标代码,如果没有就继续尝试获取(放入while循环中可以做其他事),还可以采用中断锁。

中断锁

线程的isInterrupted方法可以检查是否处于中断状态,interrupted可以将线程的中断标记设置为true,在调用join,sleep,wait都会检查中断标记,如果被中断了就立即抛出interruptedexception,并把中断标记置位false。

lock有一个lockinterruptibly方法可以尝试获取锁,如果没获取到进入了阻塞状态,就可以让其他线程中断该线程,该线程就立即抛出interruptexception异常,并且清除线程的中断状态。

(lockinterruptibly方法可以中断等待锁的线程,这是与隐式锁的重要区别之一)

定时锁

定时锁trylock,可以设置时间,在指定时间内获取了锁就返回true,否则false,如果等待过程中线程被中断也会抛出异常。

读写锁

读写锁,reentrantreadwritelock,可以调用readlock方法获得读锁,writelock获得写锁,调用lock和unlock方法,读锁可以允许其他读锁共同持有,但不允许写锁,是共享锁,写锁不允许其他锁占用,是互斥锁。

多线程的性能调优

减少锁的范围:尽量把不需要同步的代码放到同步外

减少锁的粒度:把原来用一个锁同步的方法分散成两个不同的锁,这样就可以减少锁的竞争带来的性能损失,要注意这两个锁同步的字段必须是相互独立不存在任何不变性条件的

锁分段:本来map是一个多项数据构成的集合,防止并发问题可以用一个锁来锁住全部数据,也可以分段n个数据分成n把锁一一对应,这样就可以减少锁竞争的激烈程度优化性能,但是如果要插入或删除某个元素时要一次性获取多把锁,对性能不利

转载于:https://www.cnblogs.com/shizhuoping/p/11556626.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值