0
jsonObject={"key":[2,2,3]}
jsonObject={"key":[2,4,3]}
jsonObject={"key":[2,4,6]}
,但結果是
{"key":[2,4,6]}
{"key":[2,4,6]}
{"key":[2,4,6]}
我不知道什麼是錯的。 請幫忙。 謝謝!
如何更改代碼? 對象始終是最後一個號碼。
代碼:
public class TestFutureTask {
public static void main(String[] args) {
int[] list = {1,2,3};
ExecutorService executor = Executors.newCachedThreadPool();
List<FutureTask<String>> futureTasks = new ArrayList<>();
for(int i=0;i<list.length;i++){
int[] list1 = list;
list1[i] = list1[i]*2;
JSONObject jsonObject = new JSONObject();
jsonObject.put("key", list1);
futureTasks.add(new FutureTask<String>(new QueryExecutor(jsonObject)));
}
for(int n=0;n<futureTasks.size();n++){
executor.submit(futureTasks.get(n));
}
for(int n=0;n<futureTasks.size();n++){
try {
System.out.println(futureTasks.get(n).get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
finally {
executor.shutdown();
}
}
}
}
class QueryExecutor implements Callable<String> {
private JSONObject jsonObject;
public QueryExecutor(JSONObject jsonObject){
System.out.println("jsonObject="+jsonObject);
this.jsonObject = jsonObject;
}
@Override
public String call(){
String result = jsonObject.toString();
return result;
}
}
我想,也許異步和方法調用()是指對象的問題。
ExecutorService和FutureTask。
謝謝,它解決了我的問題。 –
您的歡迎。我也意識到上面的代碼會改變邏輯,因爲列表不再被修改所修改。如果你想得到與問題中提到的結果相同的結果,請嘗試更改'jsonObject.put(「key」,list1);'to'jsonObject.put(「key」,Arrays.toString(list1));'' – Nishant