    001    /*
    002     * Copyright (c) 2007-2014 Concurrent, Inc. All Rights Reserved.
    003     *
    004     * Project and contact information: http://www.cascading.org/
    005     *
    006     * This file is part of the Cascading project.
    007     *
    008     * Licensed under the Apache License, Version 2.0 (the "License");
    009     * you may not use this file except in compliance with the License.
    010     * You may obtain a copy of the License at
    011     *
    012     *     http://www.apache.org/licenses/LICENSE-2.0
    013     *
    014     * Unless required by applicable law or agreed to in writing, software
    015     * distributed under the License is distributed on an "AS IS" BASIS,
    016     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    017     * See the License for the specific language governing permissions and
    018     * limitations under the License.
    019     */
    020
    021    package cascading.management;
    022
    023    import java.util.Collection;
    024    import java.util.List;
    025    import java.util.concurrent.Callable;
    026    import java.util.concurrent.Future;
    027    import java.util.concurrent.TimeUnit;
    028
    029    /**
    030     * The interface UnitOfWorkSpawnStrategy is a strategy for allowing pluggable thread management services into
    031     * any {@link UnitOfWork} class.
    032     * <p/>
    033     * The default strategy is {@link UnitOfWorkExecutorStrategy}.
    034     *
    035     * @see UnitOfWork
    036     * @see cascading.flow.Flow
    037     * @see cascading.cascade.Cascade
    038     */
    039    public interface UnitOfWorkSpawnStrategy
    040      {
    041      List<Future<Throwable>> start( UnitOfWork unitOfWork, int maxConcurrentThreads, Collection<Callable<Throwable>> values ) throws InterruptedException;
    042
    043      boolean isCompleted( UnitOfWork unitOfWork );
    044
    045      void complete( UnitOfWork unitOfWork, int duration, TimeUnit unit ) throws InterruptedException;
    046      }