Multithreaded programs are hard to avoid in Java.
Consider a simple program that connects to a queue manager and opens a queue at startup. The program displays a single button on the screen and, when the button is pressed, it fetches a message from the queue. This means that a thread wishing to issue a call to a queue manager is blocked until all other calls in progress for that connection have completed. If you require simultaneous access to the same queue manager from within your program, create a new queue manager object for each thread requiring concurrent access. It is therefore not possible to share MQQueueManager or MQQueue objects between threads in this environment, or to create a new MQQueueManager on a child thread.