T
TheOne
I am developing a multithreaded application. I have a main thread
(default java main thread)
which creates and starts n number of new "worker threads" whose
priority is set to MAX_PRIORITY at the
time of creation. It then calls join() on each of these threads.
The run method of these threads is something like this:
(I am giving steps here instead of actual code for space reasons)
1. //get some work to do
2. //request data over the network(IO bound operation)
3. //Do some calculations on the data (CPU bound operation)
4. //update some shared data structures
Now I want the IO operations(2) of one thread going simultaneouly
with calculations(3) of another thread (thats the whole purpose of
multithreading !!!)
But it does not happen. The first thread created (thread-0) does not
give up
CPU.
I tried lowering current thread's priority to MIN_PRIORITY before
it enters step(2) and reverting it back to MAX_PRIORITY before step(3)
but it was of no use too.
One thing I did not try (and would not like to write code for) is to
make
the currently running thread sleep for a brief amount of time between
each IO request in
step(2). I feel that it is not a proper way of making threads share CPU
equally.
Am I right?
Do you have some good suggestions on how to make ensure that one thread
does not
monopolize CPU time even when it is waiting for IO ?
I am using Java 1.5 on Windows XP platform.
(default java main thread)
which creates and starts n number of new "worker threads" whose
priority is set to MAX_PRIORITY at the
time of creation. It then calls join() on each of these threads.
The run method of these threads is something like this:
(I am giving steps here instead of actual code for space reasons)
1. //get some work to do
2. //request data over the network(IO bound operation)
3. //Do some calculations on the data (CPU bound operation)
4. //update some shared data structures
Now I want the IO operations(2) of one thread going simultaneouly
with calculations(3) of another thread (thats the whole purpose of
multithreading !!!)
But it does not happen. The first thread created (thread-0) does not
give up
CPU.
I tried lowering current thread's priority to MIN_PRIORITY before
it enters step(2) and reverting it back to MAX_PRIORITY before step(3)
but it was of no use too.
One thing I did not try (and would not like to write code for) is to
make
the currently running thread sleep for a brief amount of time between
each IO request in
step(2). I feel that it is not a proper way of making threads share CPU
equally.
Am I right?
Do you have some good suggestions on how to make ensure that one thread
does not
monopolize CPU time even when it is waiting for IO ?
I am using Java 1.5 on Windows XP platform.