Android-ThreadPoolExecutor

来源:互联网 发布:mac切换页面快捷键 编辑:程序博客网 时间:2024/06/06 12:46

ReentrantLock(互斥锁,和synchronized一样,但是具备更多的扩展功能):

class X {   private final ReentrantLock lock = new ReentrantLock();   // ...   public void m() {     lock.lock();  // block until condition holds     try {       // ... method body      finally {       lock.unlock()     }   } }}

Condition(是一个接口,一般和锁连用)

假设我们有一个bounded buffer,支持put和take,那么当已经put full的时候,这个时候就等待;take empty的时候,这个时候也等待,可以这样实现:
class BoundedBuffer {   final Lock lock = new ReentrantLock();   final Condition notFull  = lock.newCondition();    final Condition notEmpty = lock.newCondition();    final Object[] items = new Object[100];   int putptr, takeptr, count;   public void put(Object x) throws InterruptedException {     lock.lock();     try {       while (count == items.length)         notFull.await();       items[putptr] = x;       if (++putptr == items.length) putptr = 0;       ++count;       notEmpty.signal();     } finally {       lock.unlock();     }   }   public Object take() throws InterruptedException {     lock.lock();     try {       while (count == 0)         notEmpty.await();       Object x = items[takeptr];       if (++takeptr == items.length) takeptr = 0;       --count;       notFull.signal();       return x;     } finally {       lock.unlock();     }   } }


0 0