It's important to understand that in Kotlin, while you can create threads and thread pools easily, you don't access or control themdirectly. What you do is create aCoroutineDispatcher, which is basically an orchestrator that distributes coroutines among threads based on availability, load, and configuration.
In our current case, for example, we will create a CoroutineDispatcher that has only one thread, so all the coroutines that we attach to it will be running in that specific thread. To do so, we create a ThreadPoolDispatcher – which extends CoroutineDispatcher – with only one thread.
Let's open the MainActivity.kt file that was generated previously – it's in the main package of the app, co.starcarr.rssreader – and update it so that it creates such a dispatcher on the class level:
class MainActivity : AppCompatActivity() { val netDispatcher = newSingleThreadContext(name = "ServiceCall") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } }
In this and many other cases throughout the book, modifiers such as private, protected, open, and others may not be written in the examples as a way to reduce the code – thus improving the formatting for the book. Please take into account that the best practice is to always make each member as inaccessible as possible. Also, in many cases the correct modifier will be found in the code files that come with the book, since there's no formatting constraint there.