jdk 5の同時スレッドの優雅な作成方法ExecutorServices+Callableはthreadとrunableの2つの方法より簡単で実用的で、後者の2つに代わることができます.
1650 ワード
1.はじめに.
問題のようです.ExecutorServiceは、rarパッケージを同時作成し、同時マルチスレッドで同じタスクを実行するために使用できます.
2.例.
3.注意が必要です.
(1)Executorsのマルチスレッドは前後を問わず,CallableはThreadのように拡張されたスレッドという意味であり,仮想マシン上でExecutorsが作成したスレッドは見られる.
(2)callableがrunより良いのは,戻り値と放出異常があるからである.
(3)符号量を減らすことができ,同型マルチスレッド操作は信号量で互いに通知する必要がなく,操作が完了したらreturnで通知することができる.
問題のようです.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で通知することができる.