What I experienced is that on MSSQLSERVER I created multiple java threads which shared the same Connection object, one of the threads created a temporary table with an identity column, then the threads read different parts of the table (by filtering the identity column) and it worked IN PARALLEL. The same method did not work on Oracle in parallel just in consecutive order arranged by the server, though in that case threads with different instance of Connection objects were able to run select queries on the same table (not temporary) in parallel. So the answer is that it depends on the database type.