Lock
Lock lock = newReentrantLock();
lock()
用来取得对象的锁定。
unlock()
用来释放对象的锁定,通常由同一个Lock对象来调用lock()与unlock()。
读写锁
多个读锁不互斥,读锁和写锁互斥,写锁和写锁互斥。
读写锁模拟缓存例子:
public ObjectgetData(String key){
rwl.readLock().lock();//上读锁
Object value = null;
try{
value = cache.get(key);//获取数据
if(value==null){//如果没有
rwl.readLock().unlock();//解开读锁
rwl.writeLock().lock();//上写锁
try {
if(value==null){//判断数据是否已存在,防止已有线程进入第一层判断,被打断后重写数据
value = "aaa";
}
} finally {
rwl.writeLock().unlock();//解开写锁
}
rwl.readLock().lock();//还原成读锁
}
}finally{
rwl.readLock().unlock();//释放读锁
}
return value;
}
Condition的功能类似传统线程技术中的Object.wait和Object.notify的功能
Lock lock = new ReentrantLock();
Condition condition =lock.newCondition();
……
condition.await();
……
condition.signal();
Semaphore实现信号灯
Semaphore可以维护当前访问自身的线程数,并提供了同步机制。实现Semaphore可以控制同时访问资源的线程数,例如,实现一个允许的并发访问数。
CyclicBarrier
表示大家彼此等待,大家集合好后才开始出发,分散活动后又在指定地点集合碰面。
CountDownLatch
计数器到达零后,线程开始运行。
Exchanger
用于实现两个人直接的数据交换,每个人在完成一定的事物后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。
---------------------- android培训、java培训、期待与您交流!
----------------------详细请查看:http://edu.csdn.net/heima