这里整理一个题目,关于线程同步和异步。
题目:
线程同步和异步有何异同,在什么情况下分别使用他们?举例说明。
整理的答案:
同步和异步是相对于多线程来说的。
同步可防止并发, 主要出于数据安全的考虑。如果数据将在线程间共享,例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,
那么这些数据就是共享数据,必须进行同步存取。
异步允许并发,当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,
在很多情况下采用异步途径往往更有效率。
例子1:
假如你给你媳妇存钱,先查了一下是1000,你要存100,结果你存的时候你媳妇也正在取钱,她准备取100,
如果这个时候不锁定其中一人的操作,后果就很可能是,你媳妇取走了100,本来应该冲至账户金额为900,待还没有重置,你的存动作就过来了,
因为之前你那里得到的信息是1000所以存的时候是1000+100,再以重置帐户,变成1100了 而不是900
这就是同步(一个人占用了,我就不能再做了)
例子2:
普通B/S模式(同步)AJAX技术(异步)
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
例子3:
打电话是同步,发短息是异步