标签:
public class Widget{public synchronized void doSomething(){...}}public class LoggingWidget extends Widget{public sychronized void doSomething{super.doSomething();}}
public interface Lock{void lock();void lockInterruptily() throws InterruptedException;boolean tryLock();boolean tryLock(long time,TimeUnt unit) throws InterruptedException;void unlock();Condition newCondition();}/**其中前面4 个方法都是用来获取锁的,unLock()方法是用来释放锁的:1.lock()方法是用来获取锁的,如果锁已被其他线程获取,则进行等待。使用lock必须在try-catch 块中进行,释放锁必须在finally 块中进行,因为如果抛出了异常,这个锁永远都不会被释放。2.tryLock():请求加锁,如果加锁不成功返回false,不会发生阻塞3.tryLock(long time,TimeOut unit)throws InterruptedException:请求加锁,如果加锁不成功会在规定的时间内阻塞,超时后会返回,支持中断4.lockInterruptibly()throws InterruptedException:请求加锁,如果请求不到锁会发生阻塞,在阻塞过程中允许中断*/
synchronized 与 lock 锁的区别:
由于 synchronized 是 JVM 的内置锁,所以对它可进行的干预很少,甚至不需要自己来释放锁。除此之外, JVM还对内置锁做了一些优化,所以建议只有在内置锁无法满足需求的情况下,才选择使用 ReentrantLock。比如:可定时、可轮询、可中断的锁获取操作,以及非块结构(相当于ConcurrentHashMap 中的锁分段)。
Queue:
BlockingQueue:可阻塞队列,如果队列为空,获取操作将一直阻塞,直到队列出现一个 可用的元素;如果队列已满,则插入元素的操作将一直阻塞,直到队列出现可用的空间。阻塞队列一般用于生产者-消费者模式
Concurrent
Deque:Deque是对Queue的扩展,它是一个双端队列,实现了在队列头和队列尾的高效插入和移除
标签:
原文地址:http://blog.csdn.net/followmyinclinations/article/details/51881364