Thanks a lot for the answer. This certainly might be the case in my scenario as well. However, is there a way that I could query the active priority from a Thread and confirm? I also have a few questions just to confirm my thoughts on such a scenario.There is no way to query the active priority of a thread.
1) Can Priority inheritance take place if a high priority thread is blocked on some IO operation say even a simple System.out.println ?Priority inheritance occurs when a thread holding a monitor causes a higher-priority thread to block trying to acquire that monitor. At that point the thread holding the monitor is given the priority of the thread it is blocking. So this can happen anytime a lock is held, regardless of what the thread is doing at the time.
2) In the simple scenario of a couple of threads with different being active at the same time with Java or RTSJ in particular, as long as the threads are not blocked or competing for a shared resource, is it possible to assume that the highest priority thread will get the CPU 100% of the time?The simple answer is "yes" but reality is more complex. Shared resources occur at the application, VM/runtime-library, and OS levels. You would have to avoid them at all levels to ensure the highest base priority thread is also the highest active priority.
3) If we as programmers takes great care in preventing IO operations (or controlling any IO operations, i.e. where to place them in the code) even simple as a System.out, priority inversions or inheritance would not take place?Priority inheritance is not directly related to I/O operations - the issue is whether methods are synchronized or not.
4) In such a scenario highlighted in 3, what practices could be used to debug the code if needed?On Solaris we use DTrace and the Thread Scheduling Visualizer for debugging timing/scheduling relationships. I'm afraid we don't have anything equivalent on Linux at this this time.
As for exactly what I'm trying to do, it's a bit convoluted as I'm trying to achieve predictability in an existing product using RTSJ, that wouldn't be used in the trivial real-time sense, like an embedded environment, rather as a normal application. I will follow up with more details of it if needed.Don't worry, we have numerous users applying real-time Java to "normal" applications. :)