Example usage for com.google.common.util.concurrent ForwardingBlockingQueue ForwardingBlockingQueue

List of usage examples for com.google.common.util.concurrent ForwardingBlockingQueue ForwardingBlockingQueue

Introduction

In this page you can find the example usage for com.google.common.util.concurrent ForwardingBlockingQueue ForwardingBlockingQueue.

Prototype

protected ForwardingBlockingQueue() 

Source Link

Document

Constructor for use by subclasses.

Usage

From source file:org.onos.yangtools.util.ExecutorServiceUtil.java

/**
 * Creates a {@link BlockingQueue} which does not allow for non-blocking addition to the queue.
 * This is useful with {@link #waitInQueueExecutionHandler()} to turn force a
 * {@link ThreadPoolExecutor} to create as many threads as it is configured to before starting
 * to fill the queue./* w ww. j  a  v a 2s.c o  m*/
 *
 * @param delegate Backing blocking queue.
 * @return A new blocking queue backed by the delegate
 */
public static <E> BlockingQueue<E> offerFailingBlockingQueue(final BlockingQueue<E> delegate) {
    return new ForwardingBlockingQueue<E>() {
        @Override
        public boolean offer(final E o) {
            return false;
        }

        @Override
        protected BlockingQueue<E> delegate() {
            return delegate;
        }
    };
}

From source file:org.opendaylight.yangtools.util.ExecutorServiceUtil.java

/**
 * Creates a {@link BlockingQueue} which does not allow for non-blocking addition to the queue.
 * This is useful with {@link #waitInQueueExecutionHandler()} to turn force a
 * {@link ThreadPoolExecutor} to create as many threads as it is configured to before starting
 * to fill the queue./*from  ww  w  .j  a  v  a  2s .c o m*/
 *
 * @param delegate Backing blocking queue.
 * @return A new blocking queue backed by the delegate
 */
public static <E> BlockingQueue<E> offerFailingBlockingQueue(final BlockingQueue<E> delegate) {
    return new ForwardingBlockingQueue<E>() {
        @Override
        public boolean offer(@Nonnull final E o) {
            return false;
        }

        @Override
        protected BlockingQueue<E> delegate() {
            return delegate;
        }
    };
}

From source file:org.opendaylight.controller.sal.binding.codegen.impl.SingletonHolder.java

/**
 * @deprecated This method is only used from configuration modules and thus callers of it
 *             should use service injection to make the executor configurable.
 *///from   www  . j a  v a 2s.  co m
@Deprecated
public static synchronized ListeningExecutorService getDefaultNotificationExecutor() {

    if (NOTIFICATION_EXECUTOR == null) {
        int queueSize = MAX_NOTIFICATION_QUEUE_SIZE;
        final String queueValue = System.getProperty(NOTIFICATION_QUEUE_SIZE_PROPERTY);
        if (StringUtils.isNotBlank(queueValue)) {
            try {
                queueSize = Integer.parseInt(queueValue);
                logger.trace("Queue size was set to {}", queueSize);
            } catch (final NumberFormatException e) {
                logger.warn("Cannot parse {} as set by {}, using default {}", queueValue,
                        NOTIFICATION_QUEUE_SIZE_PROPERTY, queueSize);
            }
        }

        // Overriding the queue:
        // ThreadPoolExecutor would not create new threads if the queue is not full, thus adding
        // occurs in RejectedExecutionHandler.
        // This impl saturates threadpool first, then queue. When both are full caller will get blocked.
        final BlockingQueue<Runnable> delegate = new LinkedBlockingQueue<>(queueSize);
        final BlockingQueue<Runnable> queue = new ForwardingBlockingQueue<Runnable>() {
            @Override
            protected BlockingQueue<Runnable> delegate() {
                return delegate;
            }

            @Override
            public boolean offer(final Runnable r) {
                // ThreadPoolExecutor will spawn a new thread after core size is reached only
                // if the queue.offer returns false.
                return false;
            }
        };

        final ThreadFactory factory = new ThreadFactoryBuilder().setDaemon(true)
                .setNameFormat("md-sal-binding-notification-%d").build();

        final ThreadPoolExecutor executor = new ThreadPoolExecutor(CORE_NOTIFICATION_THREADS,
                MAX_NOTIFICATION_THREADS, NOTIFICATION_THREAD_LIFE, TimeUnit.SECONDS, queue, factory,
                new RejectedExecutionHandler() {
                    // if the max threads are met, then it will raise a rejectedExecution. We then push to the queue.
                    @Override
                    public void rejectedExecution(final Runnable r, final ThreadPoolExecutor executor) {
                        try {
                            executor.getQueue().put(r);
                        } catch (final InterruptedException e) {
                            throw new RejectedExecutionException("Interrupted while waiting on the queue", e);
                        }
                    }
                });

        NOTIFICATION_EXECUTOR = MoreExecutors.listeningDecorator(executor);
    }

    return NOTIFICATION_EXECUTOR;
}