Java并发编程中构建自定义同步工具
当Java类库没有提供适合的同步工具时,就需要构建自定义同步工具。
可阻塞状态依赖操作的结构
acquirlockonobjectstate;//请求获取锁 while(preconditiondoesnothold){//没有满足前提条件 releaselock;//先释放锁 waituntilpreconditionmighthold;//等待满足前提条件 optionllyfailifinterruptedortimeoutexpires;//因为中断或者超时执行失败 reacquirelock;//重新尝试获取锁 } performaction//执行 releaselock;//释放锁
有界缓存实现基类示例
publicclassBaseBoundBuffer<V>{ privatefinalV[]buf; privateinttail; privateinthead; privateintcount; @SuppressWarnings("unchecked") publicBaseBoundBuffer(intcapacity){ buf=(V[])newObject[capacity]; } publicsynchronizedvoiddoPut(Vv){ buf[tail]=v; if(++tail==buf.length) tail=0; count++; } publicsynchronizedVdoTake(){ Vv=buf[head];
if(++head==buf.length) head=0; count--; returnv; } publicfinalsynchronizedbooleanisFull(){ returncount==buf.length; } publicfinalsynchronizedbooleanisEmpty(){ returncount==0; } }