并发控制的方法

一、常用的方法

  内部锁、重入锁、读写锁、信号量。

二、重入锁

  ReentrantLock成为重入锁。提供了公平锁和非公平锁。非公平锁的性能要好些。

  注意:

    在ReentrantLock使用完毕后,务必释放ReentrantLock锁。

  1、ReentrantLock锁提供了以下重要的方法:

    lock():获得锁,如果锁已经被占用,则等待;

    lockInterruptibly():获得锁,但优先响应中断。

    tryLock():尝试获得锁,如果成功,返回true,失败返回false。该方法不等待,立即返回。

    tryLock(long time,TimeUnit unit):在给定时间内尝试获得锁。

    unlock():释放锁。

三、读写锁(ReadWriteLock)

  ReadWriteLock是jdk1.5中提供的读写分离锁。

四、Condition对象

  提供的基本方法:

  1、await():是当前线程等待,同时释放当前锁。

  2、awaitUninterruptibly():与await()方法基本相同,但是它不会在等待过程中响应中断。

  3、singal():用于唤醒一个在等待中的线程。相对的singal方法会唤醒所有在等待中的线程。

五、Semaphore信号量

  信号量为多线程协作提供了更为强大的控制方法。信号量可以指定多个线程同时访问一个资源。

  提供的方法:

  1、acquire():尝试获取一个准入的许可。若无法获得,则线程会等待。

  2、acquireUninterruptibly():与acquire方法类似,但是不响应中断。

  3、tryAcquire():尝试获取一个许可,如果成功返回true,失败返回false。

  4、release():用于线程访问资源结束后,释放一个许可,以使其他等待的线程可以进行资源访问。

六、ThreadLocal线程局部变量

  ThreadLocal完全不提供锁,而使用空间换时间的手段,为每个线程提供变量的独立副本,以保障线程安全。

  

 

posted on 2016-08-14 16:34  小胖哲  阅读(1385)  评论(0)    收藏  举报