标签:java并发编程
轮询锁:利用tryLock来获取两个锁,如果不能同时获得,那么回退并重新尝试。
定时锁:索取锁的时候可以设定一个超时时间,如果超过这个时间还没索取到锁,则不会继续堵塞而是放弃此次任务。
锁的公平性
可中断锁
public boolean sendOnSharedLine(String message)
throws InterruptedException{
lock.lockInterruptibly();
try
{
return cancellableSendOnSharedLine(message);
}finally
{
lock.unlock();
}
}
private boolean cancellableSendOnSharedLine(String message)
throws InterruptedException{...}
性能考虑(内置锁和显示锁)
二者的性能比较如下:图来自java并发编程实战
锁的公平性考虑
公平的锁
非公平的锁
等待队列
对头 1-> 2 ->3 ->4 队尾 有四个等待线程,线程0正好执行结束,此时一个线程5来了,按照公平锁的方法,那么5将会进入等待队列 1-> 2 ->3 ->4 -> 5 ,然后再从对头中取出线程1, 但是如果,采用非公平的方法,在线程5来了的同时,将线程5直接执行,跳过等待队列,那么就会减少挂起线程5和恢复线程1的开销,吞吐量获得了提升
两种锁的性能比较如下图,图来自java并发编程实战
在Synchronized和ReentrantLock之间进行选择
标签:java并发编程
原文地址:http://blog.csdn.net/yujin753/article/details/46610749