jdk 5の同時スレッドの優雅な作成方法ExecutorServices+Callableはthreadとrunableの2つの方法より簡単で実用的で、後者の2つに代わることができます.

1650 ワード

1.はじめに.
問題のようです.ExecutorServiceは、rarパッケージを同時作成し、同時マルチスレッドで同じタスクを実行するために使用できます.
2.例.

public void testCall() throws Exception{

       // , , , 

       class MyCall implements Callable<String>{

           private int seq;

           public MyCall(int seq){

              this.seq=seq;

           }

           // 

           public String call() throws Exception {

              System.err.println(" "+seq+","+Thread.currentThread().getName());

              Thread.sleep(3000);

              System.err.println("Weak up "+seq);

              return " "+seq;// 

           }

       }

       ExecutorService es = Executors.newCachedThreadPool();// 

       List<Future<String>> result =new ArrayList<Future<String>>();// 

       for(int i=0;i<3;i++){

           Future<String> f=es.submit(new MyCall(i));// 

           result.add(f);

       }

       for(Future<String> f:result){

           System.err.println(" :"+f.get());// 

       }

       System.err.println(" ....");

    }



3.注意が必要です.
(1)Executorsのマルチスレッドは前後を問わず,CallableはThreadのように拡張されたスレッドという意味であり,仮想マシン上でExecutorsが作成したスレッドは見られる.
(2)callableがrunより良いのは,戻り値と放出異常があるからである.
(3)符号量を減らすことができ,同型マルチスレッド操作は信号量で互いに通知する必要がなく,操作が完了したらreturnで通知することができる.