| Line 3: |
Line 3: |
| | ===With apt=== | | ===With apt=== |
| | <nowiki>sudo apt-add-repository ppa:webupd8team/java | | <nowiki>sudo apt-add-repository ppa:webupd8team/java |
| − | sudo apt-get update
| + | sudo apt-get update |
| − | sudo apt-get install oracle-java8-installer</nowiki>
| + | sudo apt-get install oracle-java8-installer</nowiki> |
| | | | |
| | Also ensure your JAVA_HOME variable has been set to: | | Also ensure your JAVA_HOME variable has been set to: |
| Line 1,096: |
Line 1,096: |
| | </syntaxhighlight> | | </syntaxhighlight> |
| | | | |
| − | === Return values from threads === | + | ===Return values from threads=== |
| | <syntaxhighlight lang="java"> | | <syntaxhighlight lang="java"> |
| | import java.util.concurrent.Callable; | | import java.util.concurrent.Callable; |
| | + | import java.util.concurrent.ExecutorService; |
| | + | import java.util.concurrent.Future; |
| | | | |
| | class CallableTask implements Callable<String> { | | class CallableTask implements Callable<String> { |
| Line 1,113: |
Line 1,115: |
| | } | | } |
| | | | |
| − | public class CallableRunner throws InterruptedException, Exec... { | + | public class CallableRunner throws InterruptedException, ExecutionException { |
| | public static void main(String[] args){ | | public static void main(String[] args){ |
| | ExecutorService executorService = Executors.newFixedThreadPoool(1); | | ExecutorService executorService = Executors.newFixedThreadPoool(1); |
| Line 1,120: |
Line 1,122: |
| | String welcomeMessage = welcomeFuture.get(); | | String welcomeMessage = welcomeFuture.get(); |
| | System.out.print("\nMain completed") | | System.out.print("\nMain completed") |
| | + | executorService.shutdown(); |
| | + | } |
| | + | } |
| | + | </syntaxhighlight> |
| | + | |
| | + | === Multiple callable runner === |
| | + | <syntaxhighlight lang="java"> |
| | + | import java.util.concurrent.Callable; |
| | + | import java.util.concurrent.ExecutorService; |
| | + | import java.util.concurrent.Future; |
| | + | |
| | + | class CallableTask implements Callable<String> { |
| | + | |
| | + | public CallableTask(String name){ |
| | + | this.name = name; |
| | + | } |
| | + | |
| | + | @Override |
| | + | public String call() throws Exception { |
| | + | Thread.sleep(1000); |
| | + | return "Hello " + name; |
| | + | } |
| | + | } |
| | + | |
| | + | public class MultipleCallableRunner throws InterruptedException, ExecutionException { |
| | + | public static void main(String[] args){ |
| | + | ExecutorService executorService = Executors.newFixedThreadPoool(3); |
| | + | |
| | + | List<CallableTask> tasks = List.of(new CallableTask("Manolo"), new CallableTask("Pedro")); |
| | + | |
| | + | List<Future<String>> results = executorService.invokeAll(tasks); |
| | + | // String result = executorService.invokeAny(tasks); // returns only 1 the fastest |
| | + | for (Future<String> result:results){ |
| | + | System.out.println(result.get()); |
| | + | } |
| | + | |
| | + | System.out.print("\nMain completed") |
| | + | executorService.shutdown(); |
| | } | | } |
| | } | | } |