对象池无测试实现

This commit is contained in:
eson 2019-07-02 02:14:32 +08:00
parent 1b0f865003
commit fb6382a57a

View File

@ -22,10 +22,9 @@ public class GenericServicePool {
private class GenericServiceManager {
Lock lock = new ReentrantLock();
Lock idleLock = new ReentrantLock();
LinkedList<GenericService> idle = new LinkedList<>();
LinkedList<GenericService> busy = new LinkedList<>();
private String key;
@ -50,44 +49,54 @@ public class GenericServicePool {
public GenericService get() {
try {
if(lock.tryLock(15L, TimeUnit.SECONDS)) {
if (idleLock.tryLock(15L, TimeUnit.SECONDS)) {
while (idle.isEmpty()) {
idle.wait();
}
return idle.pop();
} else {
log.error(this.key + ": 超时{}秒", 15);
}
} catch (Exception e) {
//TODO: handle exception
// TODO: handle exception
} finally {
lock.unlock();
idleLock.unlock();
}
return null;
}
public void add(GenericService gs) {
idle.add(gs);
if (idle.isEmpty()) {
idle.notify();
}
}
public GenericServiceManager() {
idle = new LinkedList<>();
busy = new LinkedList<>();
}
}
HashMap<String, GenericServiceManager> gsDictionary;
public GenericServicePool() {
gsDictionary = new HashMap<String, GenericServiceManager>();
}
public GenericService get(String key) {
GenericServiceManager pool = gsDictionary.get(key);
return pool.get();
}
public GenericService add(String key, Object genericService) {
public void add(String key, GenericService genericService) {
GenericServiceManager pool;
if (gsDictionary.containsKey(key)) {
pool = gsDictionary.get(key);
} else {
pool = new GenericServiceManager();
gsDictionary.put(key, pool);
}
pool.add(genericService);
}
}