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