2010-11-23 10 views
3

スレッドプールを使用して複数のスレッドで静的メソッドを実行する最適な方法は何ですか? また、静的メソッドに引数を渡そうとしています。Javaのスレッドプールから静的メソッドを実行

Class A{ 
public static runTask(int i){ 
    .... 
} 

} 

とメインからのようなもの:

ThreadPool pool = new ThreadPool(5, "poolname"); 

for(int i=1; i<10; i++){ 

    A.runTask(i) // but on a new thread... 

} 

ありがとう!

+0

私はあなたが変更可能な静的フィールドを使用することを意図していない願っています。 –

答えて

1

java.util.concurrent.Executorsのドキュメントをご覧ください。それはあなたのニーズを満たす必要があります。ここではそれを使用しての簡単な例です:

public class ExecutorServiceTest { 
    static ExecutorService threadPool = Executors.newCachedThreadPool(); 

    public static void main(String[] args) throws Exception { 
     // Queue 10 executions of someTask into the threadPool 
     for(int i = 0; i < 10; i++) { 
      runSomeTaskInThreadPool(); 
     } 
     // the shutdown method causes the executor to: 
     // 1. stop accepting new tasks, and 
     // 2. allow previously queued jobs to complete, and 
     // 3. shut down all pooled threads once all jobs are complete 
     threadPool.shutdown(); 
     // block until the threadPool has finished shutting down, 
     // which indicates that all tasks have finished executing 
     threadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS); 
    } 

    private static void runSomeTaskInThreadPool() { 
     Future future = threadPool.submit(new Runnable() { 
      public void run() { 
       someTask(); 
      } 
     }); 
     // TODO: Maybe keep track of futures to monitor success/failure of task 
    } 

    static AtomicInteger counter = new AtomicInteger(); 
    public static void someTask() { 
     System.out.println("someTask: " + counter.incrementAndGet() 
       + " on thread: " + Thread.currentThread()); 
    } 
} 
+0

あなたはもっと具体的になることができますか?どのエグゼクティブの誰が、どのように正確に使用すべきか? – yken

関連する問題