I'm not exactly sure how your application is using the ODWEK Java APIs - and I'm not going to review your code, but I will note the following about applications using ODWEK in a multi-threaded environment.
The ODServer object represents a single connection to an OnDemand server. This object, and all objects created from it (ODFolder, ODHit, etc...) must not be access by multiple threads at the same time. If the application needs to handle large numbers of users, it is recommended to either create a single ODserver object per user or create an ODServer connection pool where these connections can be doled out to a single transaction at a time.
It is the responsibility of the application developer to make sure they are preventing simultaneous access to an ODServer object.
Here is a really good white paper on best practices for developing applications using the ODWEK Java APIs - with sections specifically on threading, synchronization, and connections.
https://www-01.ibm.com/support/docview.wss?uid=tss1wp101203Here is a link to the ODWEK Java API Redbook – although it is several years old, this requirement still applies and hasn’t changed since the writing of this redbook. - Chapter 6.2.2 discusses ODWEK Java API objects and threads. Chapter 6 covers connection pooling and handling connections. Chapter 6.4 on Thread Safety covers the ODWEK requirement regarding ODServer objects and multiple threads.
http://www.redbooks.ibm.com/abstracts/sg247646.htmlI don't know if this is your issue or not but should give you some background into writing ODWEK applications and is a great place to start when trying to suss out issues.