Last active
February 2, 2018 21:39
-
-
Save brianyu0717/fc13f66c21ec3046e11dd52817fc8141 to your computer and use it in GitHub Desktop.
Using a bit of java.util.concurrent with Kotlin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // basic example of executing tasks in parallel | |
| fun main(args: Array<String>) { | |
| val strings = listOf("a", "b", "c") | |
| val printStringTasks = mutableListOf<Callable<Unit>>() | |
| strings.forEach { printStringTasks.add(Callable<Unit>({ | |
| println("starting task: $it") | |
| Thread.sleep(2000) | |
| println("finished task: $it") | |
| }))} | |
| val threadPoolExecutor = Executors.newFixedThreadPool(3) | |
| threadPoolExecutor.invokeAll(printStringTasks) | |
| threadPoolExecutor.shutdown() | |
| } | |
| // creating an object with results of a calling a list of Callables in parallel | |
| import java.util.concurrent.Callable | |
| import java.util.concurrent.Executors | |
| fun main(args: Array<String>) { | |
| val strings = listOf("a", "b", "c") | |
| val printStringTasks = mutableListOf<Callable<String>>() | |
| strings.forEach { printStringTasks.add(Callable<String>({ | |
| println("starting task: $it") | |
| Thread.sleep(2000) | |
| println("finished task: $it") | |
| return@Callable it | |
| }))} | |
| val threadPoolExecutor = Executors.newFixedThreadPool(3) | |
| data class ThreeStr(val a: String, val b: String, val c: String) | |
| val awaits = threadPoolExecutor.invokeAll(printStringTasks) | |
| val ts1 = ThreeStr( | |
| awaits[0].get(), | |
| awaits[1].get(), | |
| awaits[2].get() | |
| ) | |
| // can do this if the tasks are different types | |
| val res1 = threadPoolExecutor.submit(printStringTasks[0]) | |
| val res2 = threadPoolExecutor.submit(printStringTasks[1]) | |
| val res3 = threadPoolExecutor.submit(printStringTasks[2]) | |
| val ts2 = ThreeStr( | |
| res1.get(), | |
| res2.get(), | |
| res3.get() | |
| ) | |
| threadPoolExecutor.shutdown() | |
| print(ts1) | |
| print(ts2) | |
| } | |
| // prints: | |
| // starting task: b | |
| // starting task: a | |
| // finished task: a | |
| // starting task: c | |
| // finished task: c | |
| // finished task: b | |
| // ThreeStr(a=a, b=b, c=c) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment