I am having Windows system running on several processor cores (physical as well as logical). As far as my understanding goes for Java threads, threads run as light-weight processes sharing the memory (heap and global area) of the JVM process. Each concurrently running thread has a separate non-shareable stack and we assign a method to be run as part of the thread execution. While we manage synchronization for shared resources (memory, file handle, database connection etc), we have different code execution with separate call stack of data. Now, first question is, do I have a control to run threads on different processor cores,if available. If not, then I could be under-utilizing my processor capacity having one processor core heavily loaded and other processor cores under utilized. Can that be controlled through compilation flags of javac and subsequently java jvm flags? Next part of question is regarding java parallel stream. Since I have heavy duty input and output streaming operations, mostly independent of each other, in terms of content as well as chronology of executions. This demands to use parallel stream, ideally scheduled on different processor core to gain execution speed. Any suggestions/pointers?