Wie von James erwähnt, wird Statement.cancel() die Ausführung einer laufenden Anweisung (auswählen, aktualisieren, etc) abbrechen. Die JDBC-Dokumentation besagt ausdrücklich, dass Statement.cancel() sicher aus einem anderen Thread ausgeführt werden kann und schlägt sogar vor, sie in einem Zeitüberschreitungs-Thread aufzurufen.
Nachdem Sie die Anweisung abgebrochen haben, sind Sie immer noch dabei, die Transaktion rückgängig zu machen. Das ist nicht dokumentiert als sicher aus einem anderen Thread ausgeführt werden. Die Connection.rollback() sollte im Haupt-Thread geschehen, die alle anderen JDBC-Aufrufe erledigt. Sie können das behandeln, nachdem der abgebrochene Aufruf von Statement.execute ...() mit einer JDBCException abgeschlossen wurde (aufgrund des Abbrechens).
Hier ist Orakel-spezifisches Verhalten beim Aufruf von 'Statement.cancel()': http://stackoverflow.com/a/659063/603516 – Vadzim