package com.revolsys.parallel.process; import com.revolsys.parallel.ThreadUtil; import com.revolsys.parallel.channel.Channel; public class BaseInProcess<T> extends AbstractInProcess<T> { private boolean running = false; public BaseInProcess() { } public BaseInProcess(final Channel<T> in) { super(in); } public BaseInProcess(final int bufferSize) { super(bufferSize); } public BaseInProcess(final String processName) { super(processName); } protected void postRun(final Channel<T> in) { } protected void preRun(final Channel<T> in) { } protected void process(final Channel<T> in, final T object) { } @Override protected final void run(final Channel<T> in) { this.running = true; try { preRun(in); while (this.running) { if (ThreadUtil.isInterrupted()) { return; } else { final T object = in.read(5000); if (ThreadUtil.isInterrupted()) { return; } else if (object != null) { process(in, object); } } } } finally { try { postRun(in); } finally { this.running = false; } } } }