com.kapil.framework.concurrent.impl.AbstractConsumer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of iframework Show documentation
Show all versions of iframework Show documentation
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.
The 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 com.kapil.framework.concurrent.IBroker;
import com.kapil.framework.concurrent.IConsumer;
/**
*
* This class provided basic and common functionality for any class that wants to implement {@link IConsumer} and
* provide the following functionalities:
*
*
*
* This class allows the {@link Thread} until the following conditions are met
*
* - Producer sets the {@link IBroker#isProducing()} to
fasle
* - There is even one element pending in the {@link IBroker}
*
*
*
*
* @author Kapil Viren Ahuja
*
* @param
*/
public abstract class AbstractConsumer implements IConsumer
{
private IBroker broker;
protected String name;
/**
* Default Constructor that initializes the consumer with a name and {@link IBroker}.
*
* @param name
* @param broker
*/
public AbstractConsumer(String name, IBroker broker)
{
this.broker = broker;
this.name = name;
}
public String getName()
{
return this.name;
}
/**
* Function that is invoked when the {@link Thread} starts and is the entry point for the functionality.
*
*/
public void run()
{
try
{
V data = broker.get();
while (broker.isProducing() || data != null)
{
doConsume(data);
// read data after consumer has processed once.
data = broker.get();
}
}
catch (InterruptedException iex)
{
iex.printStackTrace();
}
System.out.println("Consumer " + this.name + " is shutting down");
}
/**
* This is an abstract method that allows any class extending this class to write to perform core logic.
*
* @param data
*/
public abstract void doConsume(V data);
}