1

特定のタイプのタスクの前に(前提条件をチェックするために)ボイラープレートコードを実行する必要がある同時実行構造をセットアップしようとしています。つまり、Executorがタスクをデキューした後、executeを呼び出す前にコードを実行したいと思います。これはどのように行うことができますか?

4

1 に答える 1

3

デコレータを使用しますか?

public class TestExecutor{
    public static void main(String[] args){
        Executor e = Executors.newCachedThreadPool();
        e = new PreconditionCheckerExecutor(e){
            @Override
            protected void checkPrecondition(Runnable command){
                //do some precondition
            }
        };
        e.execute(/*myRunnable1*/);
        e.execute(/*myRunnable2*/);

    }
}
abstract class PreconditionCheckerExecutor implements Executor
{
    private final Executor executor;

    PreconditionCheckerExecutor(Executor executor) {
        this.executor = executor;
    }

    @Override
    public void execute(Runnable command) {
        checkPrecondition(command);
        executor.execute(command);
    }

    protected abstract void checkPrecondition(Runnable command);
}

必要に応じて(ExecutorをExecutorServiceに置き換えるなど)、必要に応じてより具体的にすることができます。

于 2012-05-30T04:12:05.043 に答える