I think your problem is the state of the race. Since you have several threads that start and end a transaction, you can get something like the following operations:
beginTransaction()
beginTransaction()
setTransactionSuccessful()
setTransactionSuccessful()
endTransaction()
endTransaction()
I do not think that Sqlite supports several transactions open in one connection, and, as you indicate, several connections are impossible.
, , . - , synchronized, , , . , , BlockingQueue, .