Set gasPrice and gas for your transaction by hand. Do not trust gas price estimators wallets and nodes are using. Check ethgasstation.info/ for the current network status.
Also, I am not expert on web3j but on web3.js you can tune various timeouts used by the library.
You need to connect to Geth socket and not HTTP. As you have not provided the socket URL while Web3J.Build, it will map to default values, as per your comment in the code.
Here's the example:
WebSocketService socketService=new WebSocketService("ws://127.0.0.1:8546", true);
8546 is default socket port for Geth. ...