fork download
  1. //package com.imatia.elcodedocle.tools.tests.callabletest;
  2.  
  3.  
  4. import java.util.HashSet;
  5. import java.util.Set;
  6. import java.util.concurrent.*;
  7.  
  8. class Worker {
  9.  
  10. private final CountDownLatch startSignal;
  11. private final CountDownLatch doneSignal;
  12. private final int threadNumber;
  13.  
  14. Worker(
  15. CountDownLatch startSignal,
  16. CountDownLatch doneSignal,
  17. int threadNumber
  18. ){
  19.  
  20. this.startSignal = startSignal;
  21. this.doneSignal = doneSignal;
  22. this.threadNumber = threadNumber;
  23.  
  24. }
  25.  
  26. public String[][] getSomeStrArrArr() {
  27.  
  28. String[][] someStrArrArr = new String[1][1];
  29.  
  30. try {
  31.  
  32. startSignal.await();
  33. System.out.println("Running thread number "+threadNumber);
  34.  
  35. if (threadNumber == 1) {
  36. // get String[][] result for thread number 1
  37. someStrArrArr[0][0] = "Result of thread number 1";
  38. }
  39.  
  40. if (threadNumber == 2) {
  41. // get String[][] result for thread number 2
  42. someStrArrArr[0][0] = "Result of thread number 2";
  43. }
  44.  
  45. if (threadNumber == 3) {
  46. // get String[][] result for thread number 3
  47. someStrArrArr[0][0] = "Result of thread number 3";
  48. }
  49.  
  50. doneSignal.countDown();
  51.  
  52. } catch (InterruptedException ex) {
  53.  
  54. System.out.println(
  55. "Thread number "+threadNumber+" has been interrupted."
  56. );
  57.  
  58. }
  59.  
  60. return someStrArrArr;
  61.  
  62. }
  63.  
  64. public Callable<String[][]> getSomeCallableStrArrArr(){
  65. return new Callable<String[][]>() {
  66. public String[][] call() throws Exception {
  67. return getSomeStrArrArr();
  68. }
  69. };
  70. }
  71.  
  72. }
  73.  
  74. class CallableTest {
  75.  
  76. public static void main (String[] args)
  77. throws java.lang.Exception
  78. {
  79. ExecutorService pool = Executors.newFixedThreadPool(3);
  80. Set<Future<String[][]>> set = new HashSet<Future<String[][]>>();
  81. CountDownLatch startSignal = new CountDownLatch(1);
  82. CountDownLatch doneSignal = new CountDownLatch(3);
  83. for (int i=1;i<=3;i++) {
  84. Worker worker = new Worker(startSignal,doneSignal,i);
  85. Callable<String[][]> callable =
  86. worker.getSomeCallableStrArrArr();
  87. Future<String[][]> future = pool.submit(callable);
  88. set.add(future);
  89. }
  90. System.out.println("Awaiting...");
  91. startSignal.countDown();
  92. doneSignal.await();
  93. System.out.println("Ready.");
  94.  
  95. for(Future<String[][]> future : set){
  96. String[][] result = future.get();
  97. for (String[] strArr: result){
  98. for (String str: strArr){
  99. System.out.println(str);
  100. }
  101. }
  102. }
  103.  
  104. System.exit(0);
  105. }
  106.  
  107. }
Success #stdin #stdout 0.08s 381184KB
stdin
Standard input is empty
stdout
Awaiting...
Running thread number 1
Running thread number 3
Running thread number 2
Ready.
Result of thread number 2
Result of thread number 1
Result of thread number 3