what is the difference between synchronous and asynchronous in java