私は実際にこれを実装するのに苦労しています。私は最近、マルチスレッドを学び、executorサービスを使用してジョブを非同期に実行し始めました。Executorサービスを使用する方法とJava 7で複数の実行可能ファイルを持つ方法
final ArrayList<String> sList = new ArrayList<String>();
final ArrayList<String> gList = new ArrayList<String>();
final JSONArray stateId = [JSON ARRAY WITH JSON DATA]
//ExecutorService exec = new FixedThreadPoll(10);
for(String sId : stateId){
for(String sItem : sList){
for(String gItem: gList){
//do an API call
lisA.add(somthing);
}
}
}
をし、次の私は、リストを反復処理し、その中に1つの以上のリストを作成する必要があります。私はここに状況を持っている
が好きです。
for(String a : listA){
for(String sItem : sList){
for(String gItem: gList){
//do an API call
lisB.add(somthing);
}
}
}
ここでループの実行者サービスを利用し、ループを非同期に実行することで実行時間を短縮したいと考えています。しかし、私は試してみましたthat.Iを行うことはできませんよ、次
ExecutorService exec = new FixedThreadPoll(10);
for(String sId : stateId){
executor.execute(new Runnable() {
@Override
public void run() {
for(String sItem : sList){
for(String gItem: gList){
//do an API call
lisA.add(somthing);
}
}
});
}
私は値が他のループで毎回割り当てる必要があるかのように私を得ることをやるカントたいくつかの変数の最終確認する必要があります次のエラー: " Cannot refer to the non-final local variable gList defined in an enclosing scope
"。
このタスクに挑戦するために、両方のループでExecutorサービスを使用する方法をお手伝いできますか?多くの時間を費やしました。私はコンセプトを理解しましたが、実装に問題がありました。
あなたの問題はマルチスレッドに関連していません。匿名クラスのルールです。最終的なローカル変数またはeclosingクラスのインスタンス変数を匿名クラスで使用する必要があります。実行可能な例を投稿してください。なぜそれが最終的にできないのかを理解することは難しいからです。 –
@ J-Alexそれでは、最初の3つのループに対してrunnableを呼び出して、ループを速く完了し、2番目の3つのループに同じものを適用する方法はありますか?これらのループを非同期で完了させるためのエグゼキュータ・サービスの例を提供してください。私はその説明に本当に感謝します。私はこれを達成するのに苦労して集まりつつある。 – MSR