并发控制的方法
一、常用的方法
内部锁、重入锁、读写锁、信号量。
二、重入锁
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完全不提供锁,而使用空间换时间的手段,为每个线程提供变量的独立副本,以保障线程安全。
浙公网安备 33010602011771号