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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周万谋 中级黑马   /  2012-10-26 11:59  /  4954 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 周万谋 于 2012-10-28 15:14 编辑

当多个线程在操作同一个资源时,要使用到线程同步,同步主要是为了解决线程的安全问题。那么什么是异步,异步有什么特点?跟线程同步有什么区别?求解。

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

9 个回复

倒序浏览
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
异步我觉得在安卓上面用的很多,建议楼主学下异步,我认为两者都差不多,不过从字面上看,异步是对当前的调用者来说,调用的时候自己的程序在运行,异步的程序也同时在运行;多线程好像更偏于从第三方来看,比如两个者多个线程同时处理一个资源,或者同时处理各自的事情,但是多个线程之间的CPU争用可能要自己来写,比如用sleep();而异步是不用管这个的,你可以过一定的时间来查看异步的程序有没有完成或者让它调用一个事件来通知当前的程序它完成了,比如用在程序中查看IsCompleted来确定异步的调用是不是完成.我觉得用哪一种可能不重要,当你觉得用其中一个更合适的时候就选择一个就是了.

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
建议楼主学下AJAX 就知道了 , 其实很简单的 , 简单点的概括就是 方法的调用  和方法的反返回不是直线执行下去,不是当方法调用了之后就一直在那里等待程序返回,再向下执行。而是你调用了方法  然后不用一直等待着方法返回, 方法什么时候返回不用管了 , 你只要设置好了回调函数 , 调用方法返回的时候就自动调用这个回调函数。

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
异步就是说一个线程在干一个工作的时候,等待工作返回响应结果。如果没有得到响应这个线程可以继续干其他的工作而不需要一直在等的

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
如果多个线程操作共享数据,不采用同步的话,共享数据会出现同时被多个线程操作,不安全。比如卖票,多线程操作同一个数据—票数,如果不同步,会出现同号票,或者说两张一摸一样的票,这样就是不安全的。所以,为了解决这样一类问题,就要使用线程同步,这样就可以保证一个线程操作完了,另一个线程才可以拿锁进去操作。不会出现两张一摸一样的票,就安全了。
回复 使用道具 举报
感谢楼上童鞋的指导,现在有点思路了,刚百度了下,大致理解是这样:A线程正在执行动作,而B线程(B线程做他的事)要通知A线程,这时A线程继续执行动作,等到B完成动作后通知A.在这个过程可以理解为A可以不管B的执行,A继续工作,而B完成后通知A,这样貌似他们就没有影响了。
回复 使用道具 举报
陈琦 中级黑马 2012-10-26 13:06:46
8#
感觉好强大啊啊啊
回复 使用道具 举报
如果想共享数据,必须进行同步存取,防止得到垃圾数据或者不正确的数据;
使用异步,效率高点,不必苦苦等对某个程序执行完毕并能执行自己想做的事。
回复 使用道具 举报
陈琦 发表于 2012-10-26 13:06
感觉好强大啊啊啊

呵呵,写程序要的就是感觉。努力吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马