test_class.declarator: cacheTask
test_class.modifier: @Mock
test_class.original_string: @Mock
    CacheTask<Object, Object> cacheTask;
test_class.type: CacheTask<Object, Object>
test_class.var_name: cacheTask
test_class.declarator: cacheTasks
test_class.modifier: @Mock
test_class.original_string: @Mock
    BlockingQueue<CacheTask<Object, Object>> cacheTasks;
test_class.type: BlockingQueue<CacheTask<Object, Object>>
test_class.var_name: cacheTasks
test_class.declarator: asyncEvictionListener
test_class.original_string: ConcurrentEvictionListener<Object, Object> asyncEvictionListener;
test_class.type: ConcurrentEvictionListener<Object, Object>
test_class.var_name: asyncEvictionListener
test_class.file: imcache-core/src/test/java/com/cetsoft/imcache/cache/async/ConcurrentEvictionListenerTest.java
test_class.identifier: ConcurrentEvictionListenerTest
test_case.body: @Test
    public void init() throws InterruptedException {
      doNothing().when(asyncEvictionListener).drainQueue();
      asyncEvictionListener.init(1000, 3);
      Thread.sleep(5);
      verify(asyncEvictionListener, atLeast(1)).drainQueue();
    }
test_case.class_method_signature: ConcurrentEvictionListenerTest.init()
test_case.full_signature: @Test public void init()
test_case.identifier: init
test_case.invocations: drainQueue when doNothing init sleep drainQueue verify atLeast
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void init()
focal_class.declarator: DEFAULT_CONCURRENCY_LEVEL = 3
focal_class.modifier: public static final
focal_class.original_string: public static final int DEFAULT_CONCURRENCY_LEVEL = 3;
focal_class.type: int
focal_class.var_name: DEFAULT_CONCURRENCY_LEVEL
focal_class.declarator: NO_OF_EVICTION_DRAINERS = new AtomicInteger()
focal_class.modifier: private static final
focal_class.original_string: private static final AtomicInteger NO_OF_EVICTION_DRAINERS = new AtomicInteger();
focal_class.type: AtomicInteger
focal_class.var_name: NO_OF_EVICTION_DRAINERS
focal_class.file: imcache-core/src/main/java/com/cetsoft/imcache/cache/async/ConcurrentEvictionListener.java
focal_class.identifier: ConcurrentEvictionListener
focal_class.class_method_signature: ConcurrentEvictionListener.ConcurrentEvictionListener()
focal_class.full_signature: public  ConcurrentEvictionListener()
focal_class.identifier: ConcurrentEvictionListener
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.signature:  ConcurrentEvictionListener()
focal_class.class_method_signature: ConcurrentEvictionListener.ConcurrentEvictionListener(final int batchSize, final int queueSize,
        final int concurrencyLevel)
focal_class.full_signature: public  ConcurrentEvictionListener(final int batchSize, final int queueSize,
        final int concurrencyLevel)
focal_class.identifier: ConcurrentEvictionListener
focal_class.modifiers: public
focal_class.parameters: (final int batchSize, final int queueSize,
        final int concurrencyLevel)
focal_class.signature:  ConcurrentEvictionListener(final int batchSize, final int queueSize,
        final int concurrencyLevel)
focal_class.class_method_signature: ConcurrentEvictionListener.init(int queueSize, int concurrencyLevel)
focal_class.full_signature: protected void init(int queueSize, int concurrencyLevel)
focal_class.identifier: init
focal_class.modifiers: protected
focal_class.parameters: (int queueSize, int concurrencyLevel)
focal_class.return: void
focal_class.signature: void init(int queueSize, int concurrencyLevel)
focal_class.superclass: extends QueuingEvictionListener<K, V>
focal_method.body: protected void init(int queueSize, int concurrencyLevel) {
      cacheTasks = new ArrayBlockingQueue<>(queueSize);
      final ExecutorService drainerService = Executors.newFixedThreadPool(concurrencyLevel,
          runnable -> ThreadUtils
              .createDaemonThread(runnable, "imcache:concurrentAsyncEvictionDrainer(thread="
                  + NO_OF_EVICTION_DRAINERS.incrementAndGet() + ")"));
      // Creates runnables to drain cache task queue constantly.
      for (int i = 0; i < concurrencyLevel; i++) {
        drainerService.execute(() -> {
          while (true) {
            drainQueue();
          }
        });
      }
    }
focal_method.class_method_signature: ConcurrentEvictionListener.init(int queueSize, int concurrencyLevel)
focal_method.full_signature: protected void init(int queueSize, int concurrencyLevel)
focal_method.identifier: init
focal_method.invocations: newFixedThreadPool createDaemonThread incrementAndGet execute drainQueue
focal_method.modifiers: protected
focal_method.parameters: (int queueSize, int concurrencyLevel)
focal_method.return: void
focal_method.signature: void init(int queueSize, int concurrencyLevel)