1classPool<T>{ 2privatefinalintsize; 3finalList<T>items=newArrayList<>(); 4privatefinalboolean[]checkedOut; 5privatefinalSemaphoreavailable; 6 7publicPool(Class<T>classObject,intsize){ 8this.size=size; 9checkedOut=newboolean[size];10available=newSemaphore(size,true);11// Load pool with objects that can be checked out:12for(inti=0;i<size;++i){13try{14// Assumes a default constructor:15items.add(classObject.newInstance());16}catch(Exceptione){17thrownewRuntimeException(e);18}19}20}2122TcheckOut()throwsInterruptedException{23available.acquire();24returngetItem();25}2627voidcheckIn(Tx){28if(releaseItem(x)){29available.release();30System.out.println("release "+x);31}32}3334voidcheckAllIn(){35available.release(releaseAll());36}3738privatesynchronizedTgetItem(){39for(inti=0;i<size;++i){40if(!checkedOut[i]){41checkedOut[i]=true;42returnitems.get(i);43}44}45// Semaphore prevents reaching here46returnnull;47}4849privatesynchronizedbooleanreleaseItem(Titem){50intindex=items.indexOf(item);51if(index==-1){52returnfalse;// Not in the list53}54if(checkedOut[index]){55checkedOut[index]=false;5657returntrue;58}59// Wasn't checked out60returnfalse;61}6263privatesynchronizedintreleaseAll(){64intr=0;65for(inti=0;i<items.size();i++){66if(checkedOut[i]){67checkedOut[i]=false;68++r;69}70}71returnr;72}73}
1java.lang.reflect.InaccessibleObjectException:
2Unable to make field private final byte[] java.lang.String.value accessible:
3module java.base does not "opens java.lang" to unnamed module @1a2a0702