All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.kapil.framework.concurrent.impl.AsyncQueueBroker Maven / Gradle / Ivy

Go to download

This is a set of utilities and classes that I have found useful over the years. In my career spanning over a decade, I have time and again written the same code or some part of the code over and over again. I never found the time to collate the details in a reusable library. This project will be a collection of such files. The work that I have been doing is more than 5 years old, however the project has been conceived in 2011.

There is a newer version: 1.2.1
Show newest version
/*******************************************************************************
 * Copyright 2011 @ Kapil Viren Ahuja
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ******************************************************************************/
package com.kapil.framework.concurrent.impl;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;

import com.kapil.framework.concurrent.IBroker;

/**
 * 

* Implementation of {@link IBroker} that uses {@link ArrayBlockingQueue} as the data store. *

* * @author Kapil Viren Ahuja * * @param */ public class AsyncQueueBroker extends AbstractBroker { ArrayBlockingQueue queue; /** * Constructor with no parameters. It will initialize the {@link IBroker} with following settings: * *
    *
  • Capacity: 100
  • *
  • Timeout: 3 seconds
  • *
* */ public AsyncQueueBroker() { this(100); } /** * Constructor that accepts the capacity as the parameter. It will initialize the {@link IBroker} with following * settings: * *
    *
  • Capacity: as provided
  • *
  • Timeout: 3 seconds
  • *
* */ public AsyncQueueBroker(int capacity) { this(capacity, 3); } /** * Constructor with parameters for capacity and timeout (in seconds) * *
    *
  • Capacity: 100
  • *
  • Timeout: 3 seconds
  • *
* */ public AsyncQueueBroker(int capacity, int timeoutDuration) { super(capacity, timeoutDuration); queue = new ArrayBlockingQueue(100); } /** *

* Provides implementation for {@link IBroker#put(Object)} by putting the object in the Queue using * the underlying {@link ArrayBlockingQueue} implementation. This method will add the data * at the end of the queue. *

* *

* In addition, if the underlying queue is full, this method will put the {@link Thread} in wait * state until the {@link ArrayBlockingQueue} has memory to receive any further data, *

* */ @Override public void put(V data) throws InterruptedException { this.queue.put(data); } /** *

* Provides implementation for {@link IBroker#get()} by fetching the object in the Queue using * the underlying {@link ArrayBlockingQueue} implementation. This method will get the data * from the top of the queue using the FIFO method. *

* *

* In addition, if there are no objects in the underlying queue i.e. the queue is empty, this method * will put the {@link Thread} in wait state until the {@link ArrayBlockingQueue} has objects. *

* */ @Override public V get() throws InterruptedException { return this.queue.poll(super.timeoutDuration, TimeUnit.SECONDS); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy