You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.2 KiB

8 years ago
  1. package com.highcharts.export.pool;
  2. import java.util.concurrent.LinkedBlockingQueue;
  3. import java.util.concurrent.TimeUnit;
  4. public class BlockingQueuePool<T> extends AbstractPool<T>{
  5. LinkedBlockingQueue<T> linkQueue;
  6. /**
  7. * @param factory
  8. * @param number
  9. * @throws PoolException
  10. */
  11. public BlockingQueuePool(ObjectFactory<T> factory, int number, int maxWait, long retentionTime) throws PoolException {
  12. super(factory, number, maxWait, retentionTime);
  13. queue = new LinkedBlockingQueue<T>();
  14. linkQueue = (LinkedBlockingQueue<T>) queue;
  15. }
  16. @Override
  17. public T borrowObject() throws InterruptedException, PoolException {
  18. T object = linkQueue.poll(maxWait, TimeUnit.MILLISECONDS);
  19. if (object == null) {
  20. throw new PoolException();
  21. }
  22. poolSize.getAndDecrement();
  23. return object;
  24. }
  25. @Override
  26. public void returnObject(T object, boolean validate) throws InterruptedException {
  27. if (object == null) {
  28. return;
  29. }
  30. boolean valid = ( !validate || objectFactory.validate(object)) ? true : false;
  31. if (!valid) {
  32. destroyObject(object);
  33. } else {
  34. objectFactory.passivate(object);
  35. linkQueue.offer(object, maxWait, TimeUnit.MILLISECONDS);
  36. poolSize.incrementAndGet();
  37. }
  38. }
  39. }