请教高手:同步与异步到底什么意思? “CSDN全体同仁共同进步”,按照汉语的意思,这个“进步”是同时发生的,可以理解为“同步”,但是,对于Java多线程来讲,却属于异步的情形,这到底是怎么回事呢?个人直觉,理解这个问题,对于理解多线程并发的问题很重要,但我想破脑袋也难以明白,请高手指教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个大概不能准确的表达我的意思,换种情形:小海与女朋友小花租了一个小单间,虽然空间不大,但却是他们(两个线程)爱的巢穴(共享资源),夜深人静的时候,他们(两个线程)同时在这片温馨的空间里柔情蜜意(同时访问这片共享资源)有一天,他们发生了内部矛盾。小花首先下班回家,并将门反锁(获得共享对象的锁),当小海回来时,小花怎么也不开门,所以小海只能在街上吹了一夜冷风,第二天早晨小海再回家的时候,小花已经上班去了,小海才用钥匙开了门,一时糊涂,也将门给反锁上对于Java多线程来讲第一个情景属于异步的情形——他们同时使用一个房间做爱怎么不是“同步”呢?第二个情景属于同步的情形——他们并没有同时使用一个房间做爱什么的怎么不是“异步”呢?面向对象的语言,应该与很多领域的道理是相通的,比如汉语里的多义词与方法重载,血缘关系与继承,软件架构师设计的框架与建筑工程师手里的设计图纸等等,但这里为什么却与现实意义相反呢?同步与异步应该是个相对的概念,但到底又是相对什么来说的呢? synchronized 在英文里就是同步,同一时间的意思,与汉语应该没有什么区别啊我的意思是同步为什么不叫“异步”,而是“同步”呢?这里的取名肯定有他的道理,但我仍然没有弄明白同步与异步应该是个相对的概念,相对谁同步或异步?相对于共享对象的状态么? 多线程的使用为我们的程序提供了众多的方便,同时它也给我们带来了以往没有考虑过的麻烦。当我们使用多线程处理共享资源时意外将会发生:比如我们一起外出就餐,每个人都是一个线程,餐桌上的食物则是共享资源,当我看到红烧鸡腿上桌后立即拿起筷子直奔目标,眼看着就得手的时候,突然~~~鸡腿消失了,一个距离盘子更近的线程正在得意地啃着。我的blog中有一个同步的小例子,有兴趣可以参考下:http://blog.csdn.net/mq612/archive/2007/03/04/1520583.aspx 一个侦探(线程)在侦查犯罪现场,现场并没有封锁,这时胆大的犯罪分子(另一线程)偷偷溜回犯罪现场,在侦探不知道的情况下制造假象(改变了资源),粗心的侦探没有发现有人进入并改动过现场(就和一个线程并不知道另一个线程改动过对象一样),在收集了线索,拍了照片后return(clue)了。这时候可以说侦探得到的线索(clue)和原来真实的场景不同步。如果之前对现场进行封锁,就不会出现这种情况了。 to qq7338367(.深秋小雨:让一切归于简单 快乐在指尖绽放) ...这时候可以说侦探得到的线索(clue)和原来真实的场景不同步....-----------------------------------------------------------我大概有些理解了同步与异步应该是个相对的概念,但不是一个线程相对于另一个线程来说的而应该是一个线程相对于其共享资源的状态是否“同步”synchronize 在英文有这样个解释——使同时发生:使与其它事物在同一时间出现或运作当多线程 synchronized 时,就意味着,在同一时间内,只能有一个线程会与共享资源交付,这时,此线程与共享资源的状态同时运作,不受外界的影响,从而步调一致。否则,多个线程同时访问一个共享资源,就很可能造成每个线程与这个共享资源的状态“异步”,即某个线程在一段时间内多次访问共享资源时,可能出现步调不一致的情况(此共享资源在这段时间内被其他线程修改甚至删除)不知这种解释是否准确?多谢qq7338367(.深秋小雨:让一切归于简单 快乐在指尖绽放) 以及大家的讨论! java接口继承问题 java线程锁同步问题,刚接触线程锁,出错了,代码很少,请看 (java问题)怎样在谷歌地图V3版从数据库中取出图标经纬度自动添加图标? java 实现接口的疑惑!求高手解释··· SWT Table的问题 JAVA JTable 做的表格怎么缺少两条线? 令人头痛的事???求助.... Panel用法和布局管理器 一个关于getGraphics()的问题 急! tomcat报错,求大家给看看什么原因 通过Java Swing看透MVC设计模式 java内存溢出 在线等 急用
这个大概不能准确的表达我的意思,换种情形:小海与女朋友小花租了一个小单间,虽然空间不大,但却是他们(两个线程)爱的巢穴(共享资源),夜深人静的时候,他们(两个线程)同时在这片温馨的空间里柔情蜜意(同时访问这片共享资源)有一天,他们发生了内部矛盾。小花首先下班回家,并将门反锁(获得共享对象的锁),当小海回来时,小花怎么也不开门,所以小海只能在街上吹了一夜冷风,第二天早晨小海再回家的时候,小花已经上班去了,小海才用钥匙开了门,一时糊涂,也将门给反锁上
对于Java多线程来讲第一个情景属于异步的情形——他们同时使用一个房间做爱怎么不是“同步”呢?第二个情景属于同步的情形——他们并没有同时使用一个房间做爱什么的怎么不是“异步”呢?
面向对象的语言,应该与很多领域的道理是相通的,比如汉语里的多义词与方法重载,血缘关系与继承,软件架构师设计的框架与建筑工程师手里的设计图纸等等,但这里为什么却与现实意义相反呢?同步与异步应该是个相对的概念,但到底又是相对什么来说的呢?
http://blog.csdn.net/mq612/archive/2007/03/04/1520583.aspx
-----------------------------------------------------------
我大概有些理解了同步与异步应该是个相对的概念,但不是一个线程相对于另一个线程来说的
而应该是一个线程相对于其共享资源的状态是否“同步”synchronize 在英文有这样个解释——使同时发生:使与其它事物在同一时间出现或运作当多线程 synchronized 时,就意味着,在同一时间内,只能有一个线程会与共享资源
交付,这时,此线程与共享资源的状态同时运作,不受外界的影响,从而步调一致。否则,多个线程同时访问一个共享资源,就很可能造成每个线程与这个共享资源的状态
“异步”,即某个线程在一段时间内多次访问共享资源时,可能出现步调不一致的情况
(此共享资源在这段时间内被其他线程修改甚至删除)不知这种解释是否准确?多谢qq7338367(.深秋小雨:让一切归于简单 快乐在指尖绽放) 以及大家的讨论!