JDBC is pretty much all single threaded. From Connection down it is expected only one thread will use it for it's lifetime (ok Connections can get pooled but that should be invisible to the application and only one thread should be using a Connection at a time).
There is one exception which is Statement.cancel()
which permits another thread to interrupt/cancel an in-progress query but I believe this is the only instance of multi-threaded-ness.
Like duffymo says typically if you want async behaviour you would build something on top of JDBC (and I would guess that's what .NET is doing under the covers).