I was going through a Java tutorial where it was mentioned that actual multithreading doesn’t happen in a machine having a single processor. It mentioned that OS allots a specified amount of time for the Java process and JVM thread scheduler picks up threads for running one thread at a time for a small amount of time.
I have a laptop which quadcore processor – it is possible to run a multi-threaded program faster programatically by running one thread in each core? The reason why I am asking this question is because the book mentioned that only a true multi processor system can do multiple things at the same time.
Even a single CPU can do “multiple things at the same time” in a loose sense, but they are not truly in parallel. You can start 100 threads to run on a single core and they will get time slices during which each of them can run a few instructions, thus creating the impression that they are all executing at the same time.
As I’ve said in another SO post: multithreading on dual core machine?
The term threads usually covers three abstraction layers:
Java threads are user threads. The 4 cores in your CPU count as hardware threads. Since the mapping is N:M across the layers, you can see that you can have several user threads mapped to a smaller number of hardware threads.
Now, having said this, there are generally two classes of thread activities, each with their own quirks:
The second class of threads above lets you really see the benefit or running a multithreaded java program on your quad-core CPU. Here is a simple example of a program that executes squaring of 1.000.000.000 numbers first sequentially and then in parallel using a thread pool with 4 threads:
Feel free to adjust the value of
totalif it’s running too fast. Now I’m working on a netbook with Intel Atom, so it not really fast.