A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 海中的游弋草 黑马帝   /  2011-12-20 22:51  /  3600 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 海中的游弋草 于 2011-12-21 10:50 编辑

多线程中同步和异步有什么不同,在什么情况下使用同步,什么情况下使用异步呢?

3 个回复

倒序浏览
曾运 黑马帝 2011-12-20 23:14:42
沙发
同步:
不允许并发访问,保证数据安全,如卖100张票,A售票点线程卖了1张后,由于线程会抢CPU执行权,在A售票点还没进行100-1=99 更新显示票的数据的时候,B售票点线程拿到了执行权进行卖票,这时候票的数据是100,显然数据是错误的,我们可以用sychronized或者同步代码块的办法让 A售票点线程在售票的时候加个锁,让其他线程都无法进来,等A售票点线程操作完成,更新了操作后的数据后,再释放锁,让其他线程进来继续卖票。 线程间共享的数据我们加上同步保证数据准确,安全。

异步:
允许并发访问,可以节约时间提高效率。如AJAX技术,我们用QQ空间的回复留言的时候就是异步的,前台网页上的操作不会阻塞,我们留言的内容会异步与服务交互,并且显示在网页中,而不会刷新整个网页。
回复 使用道具 举报
          如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
      当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
回复 使用道具 举报
同步:同步用于多线程中对共享、可变的数据。但是为了保证数据的读写安全,当用户并发操作时可使用synchronized实现线程之间的同步,对数据进行保护,防止错误的读写数据。
异步:我的理解是它不会等待,就可以发下一个请求了,而同步则了执行完一个同步代码后,另一个线程才能执行,需要等待,显然能异步的话效率会更高。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马