Actual Statement.setQueryTimeout use one additional thread per query.
The actual implementation create an additional thread. When timeout, a new connection will be created to permit executing a query to killing the current connection.
Since server 10.1, MariaDB server has a command that permit server to handle that directly : https://mariadb.com/kb/en/mariadb/aborting-statements/ with command : SET STATEMENT max_statement_time=1 FOR "..."
The solution has to be implemented.
This has another advantage to be compatible with maxscale (existing connection is not, since the thread ID number is a fake Maxscale thread ID)