//package com.imatia.elcodedocle.tools.tests.callabletest;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.*;
class Worker {
private final CountDownLatch startSignal;
private final CountDownLatch doneSignal;
private final int threadNumber;
Worker(
CountDownLatch startSignal,
CountDownLatch doneSignal,
int threadNumber
){
this.startSignal = startSignal;
this.doneSignal = doneSignal;
this.threadNumber = threadNumber;
}
public String[][] getSomeStrArrArr
() {
try {
startSignal.await();
System.
out.
println("Running thread number "+threadNumber
);
if (threadNumber == 1) {
// get String[][] result for thread number 1
someStrArrArr[0][0] = "Result of thread number 1";
}
if (threadNumber == 2) {
// get String[][] result for thread number 2
someStrArrArr[0][0] = "Result of thread number 2";
}
if (threadNumber == 3) {
// get String[][] result for thread number 3
someStrArrArr[0][0] = "Result of thread number 3";
}
doneSignal.countDown();
"Thread number "+threadNumber+" has been interrupted."
);
}
return someStrArrArr;
}
public Callable
<String[][]> getSomeCallableStrArrArr
(){ return new Callable
<String[][]>() { return getSomeStrArrArr();
}
};
}
}
class CallableTest {
public static void main
(String[] args
) {
ExecutorService pool = Executors.newFixedThreadPool(3);
Set
<Future
<String[][]>> set
= new HashSet
<Future
<String[][]>>(); CountDownLatch startSignal = new CountDownLatch(1);
CountDownLatch doneSignal = new CountDownLatch(3);
for (int i=1;i<=3;i++) {
Worker worker = new Worker(startSignal,doneSignal,i);
Callable
<String[][]> callable
= worker.getSomeCallableStrArrArr();
Future
<String[][]> future
= pool.
submit(callable
); set.add(future);
}
System.
out.
println("Awaiting..."); startSignal.countDown();
doneSignal.await();
for(Future
<String[][]> future
: set
){ String[][] result
= future.
get(); for (String[] strArr
: result
){ }
}
}
}
}