Advertisement
Guest User

Untitled

a guest
Apr 27th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.71 KB | None | 0 0
  1. import java.util.Collection;
  2. import java.util.Iterator;
  3. import java.util.concurrent.LinkedTransferQueue;
  4. import java.util.concurrent.RejectedExecutionException;
  5. import java.util.concurrent.RejectedExecutionHandler;
  6. import java.util.concurrent.ThreadPoolExecutor;
  7. import java.util.concurrent.TimeUnit;
  8. import java.util.concurrent.TransferQueue;
  9.  
  10. public final class ScalingThreadPoolExecutor extends ThreadPoolExecutor {
  11.  
  12. public ScalingThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit keepAliveUnit) {
  13. super(corePoolSize, maximumPoolSize, keepAliveTime, keepAliveUnit, new DynamicBlockingQueue<Runnable>(new LinkedTransferQueue<Runnable>()), new ForceQueuePolicy());
  14. }
  15.  
  16. public ScalingThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit keepAliveUnit, TransferQueue<Runnable> workQueue) {
  17. super(corePoolSize, maximumPoolSize, keepAliveTime, keepAliveUnit, new DynamicBlockingQueue<Runnable>(workQueue), new ForceQueuePolicy());
  18. }
  19.  
  20. @Override
  21. public void setRejectedExecutionHandler(RejectedExecutionHandler handler) {
  22. throw new IllegalArgumentException("Cant set rejection handler");
  23. }
  24.  
  25. private static class ForceQueuePolicy implements RejectedExecutionHandler {
  26.  
  27. public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
  28. try {
  29. //Rejected work add to Queue.
  30. executor.getQueue().put(r);
  31. } catch (InterruptedException e) {
  32. //should never happen since we never wait
  33. throw new RejectedExecutionException(e);
  34. }
  35. }
  36. }
  37.  
  38. private static class DynamicBlockingQueue<E> implements TransferQueue<E> {
  39.  
  40. private final TransferQueue<E> delegate;
  41.  
  42. public DynamicBlockingQueue(final TransferQueue<E> delegate) {
  43. this.delegate = delegate;
  44. }
  45.  
  46. @Override
  47. public boolean offer(E o) {
  48. return tryTransfer(o);
  49. }
  50.  
  51. @Override
  52. public boolean add(E o) {
  53.  
  54. if (this.delegate.add(o)) {
  55. return true;
  56. } else {// Not possible in our case
  57. throw new IllegalStateException("Queue full");
  58. }
  59. }
  60.  
  61. @Override
  62. public E remove() {
  63. return this.delegate.remove();
  64. }
  65.  
  66. @Override
  67. public E poll() {
  68. return this.delegate.poll();
  69. }
  70.  
  71. @Override
  72. public E element() {
  73. return this.delegate.element();
  74. }
  75.  
  76. @Override
  77. public E peek() {
  78. return this.delegate.peek();
  79. }
  80.  
  81. @Override
  82. public int size() {
  83. return this.delegate.size();
  84. }
  85.  
  86. @Override
  87. public boolean isEmpty() {
  88. return this.delegate.isEmpty();
  89. }
  90.  
  91. @Override
  92. public Iterator<E> iterator() {
  93. return this.delegate.iterator();
  94. }
  95.  
  96. @Override
  97. public Object[] toArray() {
  98. return this.delegate.toArray();
  99. }
  100.  
  101. @Override
  102. public <T> T[] toArray(T[] a) {
  103. return this.delegate.toArray(a);
  104. }
  105.  
  106. @Override
  107. public boolean containsAll(Collection<?> c) {
  108. return this.delegate.containsAll(c);
  109. }
  110.  
  111. @Override
  112. public boolean addAll(Collection<? extends E> c) {
  113. return this.delegate.addAll(c);
  114. }
  115.  
  116. @Override
  117. public boolean removeAll(Collection<?> c) {
  118. return this.delegate.removeAll(c);
  119. }
  120.  
  121. @Override
  122. public boolean retainAll(Collection<?> c) {
  123. return this.delegate.retainAll(c);
  124. }
  125.  
  126. @Override
  127. public void clear() {
  128. this.delegate.clear();
  129. }
  130.  
  131. @Override
  132. public void put(E e) throws InterruptedException {
  133. this.delegate.put(e);
  134. }
  135.  
  136. @Override
  137. public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException {
  138. return this.delegate.offer(e, timeout, unit);
  139. }
  140.  
  141. @Override
  142. public E take() throws InterruptedException {
  143. return this.delegate.take();
  144. }
  145.  
  146. @Override
  147. public E poll(long timeout, TimeUnit unit) throws InterruptedException {
  148. return this.delegate.poll(timeout, unit);
  149. }
  150.  
  151. @Override
  152. public int remainingCapacity() {
  153. return this.delegate.remainingCapacity();
  154. }
  155.  
  156. @Override
  157. public boolean remove(Object o) {
  158. return this.delegate.remove(o);
  159. }
  160.  
  161. @Override
  162. public boolean contains(Object o) {
  163. return this.delegate.contains(o);
  164. }
  165.  
  166. @Override
  167. public int drainTo(Collection<? super E> c) {
  168. return this.delegate.drainTo(c);
  169. }
  170.  
  171. @Override
  172. public int drainTo(Collection<? super E> c, int maxElements) {
  173. return this.delegate.drainTo(c, maxElements);
  174. }
  175.  
  176. @Override
  177. public boolean tryTransfer(E e) {
  178. return this.delegate.tryTransfer(e);
  179. }
  180.  
  181. @Override
  182. public void transfer(E e) throws InterruptedException {
  183. this.delegate.transfer(e);
  184. }
  185.  
  186. @Override
  187. public boolean tryTransfer(E e, long timeout, TimeUnit unit) throws InterruptedException {
  188. return this.delegate.tryTransfer(e, timeout, unit);
  189. }
  190.  
  191. @Override
  192. public boolean hasWaitingConsumer() {
  193. return this.delegate.hasWaitingConsumer();
  194. }
  195.  
  196. @Override
  197. public int getWaitingConsumerCount() {
  198. return this.delegate.getWaitingConsumerCount();
  199. }
  200. }
  201. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement