質問: JDBC(MariaDB Java)で1つのコネクションで 一度に多数のリクエストを送信した場合、同時にSQLの実行が行われるのでしょうか? 複数のスレッドで同時に送信という状態でございます。
回答: そもそもスレッドセーフでは無いのでは...と思い込んでいたのですが、どうも仕様ではスレッドセーフであることを要求しているようですね。古い(urlから察するにjdk1.2時代)&オフィシャルかどうかよくわからないドキュメントしか見つけられませんでしたが... > > 9.2 Multi-threading > > We require that all operations on all the java.sql objects be multi-thread safe and able to cope > > correctly with having several threads simultaneously calling the same object. > > > (書いている最中に思ったのですが、現在の仕様ではスレッドセーフであることは要求されていない可能性もありますね。) 仕様の話はおいておいて、実際のMariaDB実装はどうなっているのかというと... `java.sql.Connection` のMariaDB実装は `org.mariadb.jdbc.MariaDbConnection`, そして `crateStatement` メソッドで取得できる `java.sql.Statement` の実装は `org.mariadb.jdbc.MariaDbStatement` のようです。 このコードを見てみると、`execute` メソッドの中で `ReentrantLock#lock()` によって `Connection` インスタンス単位のロックを取得しているのがわかります。 要するに、 > > 一度に多数のリクエストを送信した場合、同時にSQLの実行が行われるのでしょうか? > > > の回答としては、 「**JDBCドライバが逐次化するので同時には実行されません**」 ということになります。