The time out capability receives time in seconds... so 3600 seconds is 1 hour.
Thread.sleep receives time in milliseconds so 300000 milliseconds is 5 minutes.
You should use:
desiredCapabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 3600)
...
Thread.sleep(300000);
Off course, you are free to use the times you prefer 