同步和异步的区别
同步
多线程的数据共享问题
多个线程访问同一资源时,需要以某种顺序来保证资源在某一时刻只能被一个线程使用。
例如:当多个线程同时对同一数据进行写操作。即A线程需要使用某个资源,此时这个资源正在被B线程使用,同步机制就会让A线程进行等待,直到B线程结束对该资源的使用,A线程才能使用该资源。
同步机制保证了资源的安全问题。
Java语言的同步机制
- 同步代码块
- 同步方法
- 可以使用synchronized关键字来实现同步(该方法有较大的系统开销,有的时候会造成死锁问题)
异步
定义
同步的相反。
每个线程都包含了自己的数据和方法,在进行输入输出处理时,不必关心其他线程的状态或者行为。
也不必等待输入输出处理完毕才返回。
什么时候使用异步
在程序执行过程中调用了一个需要花费很长时间的方法,但是我们不希望程序等待这个方法的返回。此时可以使用异步编程,异步编程提高了程序的效率。
生活实例
同步:银行的一个窗口排队,按照顺序执行。
异步:银行的多个窗口排队。