    001package com.hammurapi.common;
    002
    003import java.util.concurrent.locks.Lock;
    004import java.util.concurrent.locks.ReentrantLock;
    005
    006/**
    007 * LocalJoiner uses java.util.concurrent.locks.ReentrantLock to protect simultaneous access
    008 * to input collectors.
    009 * @author Pavel Vlasov
    010 *
    011 * @param <T>
    012 * @param <C>
    013 * @param <R>
    014 */
    015public abstract class LocalJoiner<T, C, R> extends Joiner<T, C, R> {
    016
    017        Lock lock = new ReentrantLock();
    018
    019        protected LocalJoiner(
    020                        Collector<T>[] inputCollectors,
    021                        Class<T> inputType,
    022                        boolean outerJoin) {
    023                super(inputCollectors, inputType, outerJoin);
    024        }
    025
    026        @Override
    027        protected void startJoin() {
    028                lock.lock();
    029        }
    030
    031        @Override
    032        protected void endJoin() {
    033                lock.unlock();
    034        }
    035
    036}