How to return object from Callable()
callable, java, multithreading
Solution
Adding to Joseph Ottinger's answer, to pass values to be used inside Callable's call() method, you can use closures:
public static Callable<Integer[][]> getMultiplierCallable(final int[][] xs,
final int[][] ys, final int length) {
return new Callable<Integer[][]>() {
public Integer[][] call() throws Exception {
Integer[][] answer = new Integer[length][length];
answer = multiplyArray(xs, ys, length);
return answer;
}
};
}
public static void main(final String[] args) throws ExecutionException,
InterruptedException {
final int[][] xs = {{1, 2}, {3, 4}};
final int[][] ys = {{1, 2}, {3, 4}};
final Callable<Integer[][]> callable = getMultiplierCallable(xs, ys, 2);
final ExecutorService service = Executors.newFixedThreadPool(2);
final Future<Integer[][]> result = service.submit(callable);
final Integer[][] intArray = result.get();
for (final Integer[] element : intArray) {
System.out.println(Arrays.toString(element));
}
}
Problem
I'm trying to return a 2d array from call(), I'm having some issues. My code so far is: ``` //this is the end of main Thread t1 = new Thread(new ArrayMultiplication(Array1, Array2, length)); t1.start(); } public int[][] call(int[][] answer) { int[][] answer = new int[length][length]; answer = multiplyArray(Array1, Array2, length); //off to another function which returns the answer to here return answer; } ``` This code compiles, this is not returning my array. I'm sure I'm probably using the wrong syntax, but I can't find any good examples. EDIT: changed it a bit