1

スレッドとして実行されるクラスがあり、実行が終了したら再度実行したいと考えています。また、同じクラスの 2 ~ 3 つのスレッドを同時に実行することもできます (つまり、スレッドの実行が終了しても 2 つのスレッドが終了した場合)。が実行されている場合、1 つだけが再度実行される、など)。

私が試したコードは次のとおりです。

ExecutorService pool = Executors.newFixedThreadPool( 3 );
while( true )
    pool.submit( new MyThread() );

これを達成する方法についてのフィードバックはありますか?

更新: クラス MyThread は実際には MyRunnable です!

どうもありがとう、ヴラド

4

2 に答える 2

1

使用ExecutorCompletionService:

ExecutorService executor = Executors.newFixedThreadPool(3);
CompletionService<Void> compService = new ExecutorCompletionService<Void>(executor);

for(int i = 0; i < 3; i++) compService.submit(new Task(), null);

while(true)
{
    compService.take(); // wait until one of the threads finishes its task
    compService.submit(new Task(), null);
}
于 2013-03-20T14:13:58.017 に答える
1

試す

    final ExecutorService pool = Executors.newFixedThreadPool(3);
    pool.submit(new Runnable() {
        public void run() {
            System.out.println("running1");
            pool.submit(this);
        }
    });

    pool.submit(new Runnable() {
        public void run() {
            System.out.println("running2");
            pool.submit(this);
        }
    });
于 2013-03-20T14:09:33.300 に答える