“CSDN全体同仁共同进步”,按照汉语的意思,这个“进步”是同时发生的,可以理解为“同步”,但是,对于Java多线程来讲,却属于异步的情形,这到底是怎么回事呢?
个人直觉,理解这个问题,对于理解多线程并发的问题很重要,但我想破脑袋也难以明白,请高手指教!

解决方案 »

  1.   


    这个大概不能准确的表达我的意思,换种情形:小海与女朋友小花租了一个小单间,虽然空间不大,但却是他们(两个线程)爱的巢穴(共享资源),夜深人静的时候,他们(两个线程)同时在这片温馨的空间里柔情蜜意(同时访问这片共享资源)有一天,他们发生了内部矛盾。小花首先下班回家,并将门反锁(获得共享对象的锁),当小海回来时,小花怎么也不开门,所以小海只能在街上吹了一夜冷风,第二天早晨小海再回家的时候,小花已经上班去了,小海才用钥匙开了门,一时糊涂,也将门给反锁上
    对于Java多线程来讲第一个情景属于异步的情形——他们同时使用一个房间做爱怎么不是“同步”呢?第二个情景属于同步的情形——他们并没有同时使用一个房间做爱什么的怎么不是“异步”呢?
    面向对象的语言,应该与很多领域的道理是相通的,比如汉语里的多义词与方法重载,血缘关系与继承,软件架构师设计的框架与建筑工程师手里的设计图纸等等,但这里为什么却与现实意义相反呢?同步与异步应该是个相对的概念,但到底又是相对什么来说的呢?
      

  2.   

    synchronized 在英文里就是同步,同一时间的意思,与汉语应该没有什么区别啊我的意思是同步为什么不叫“异步”,而是“同步”呢?这里的取名肯定有他的道理,但我仍然没有弄明白同步与异步应该是个相对的概念,相对谁同步或异步?相对于共享对象的状态么?
      

  3.   

    多线程的使用为我们的程序提供了众多的方便,同时它也给我们带来了以往没有考虑过的麻烦。当我们使用多线程处理共享资源时意外将会发生:比如我们一起外出就餐,每个人都是一个线程,餐桌上的食物则是共享资源,当我看到红烧鸡腿上桌后立即拿起筷子直奔目标,眼看着就得手的时候,突然~~~鸡腿消失了,一个距离盘子更近的线程正在得意地啃着。我的blog中有一个同步的小例子,有兴趣可以参考下:
    http://blog.csdn.net/mq612/archive/2007/03/04/1520583.aspx
      

  4.   

    一个侦探(线程)在侦查犯罪现场,现场并没有封锁,这时胆大的犯罪分子(另一线程)偷偷溜回犯罪现场,在侦探不知道的情况下制造假象(改变了资源),粗心的侦探没有发现有人进入并改动过现场(就和一个线程并不知道另一个线程改动过对象一样),在收集了线索,拍了照片后return(clue)了。这时候可以说侦探得到的线索(clue)和原来真实的场景不同步。如果之前对现场进行封锁,就不会出现这种情况了。
      

  5.   

    to  qq7338367(.深秋小雨:让一切归于简单 快乐在指尖绽放) ...这时候可以说侦探得到的线索(clue)和原来真实的场景不同步....
    -----------------------------------------------------------
    我大概有些理解了同步与异步应该是个相对的概念,但不是一个线程相对于另一个线程来说的
    而应该是一个线程相对于其共享资源的状态是否“同步”synchronize 在英文有这样个解释——使同时发生:使与其它事物在同一时间出现或运作当多线程 synchronized 时,就意味着,在同一时间内,只能有一个线程会与共享资源
    交付,这时,此线程与共享资源的状态同时运作,不受外界的影响,从而步调一致。否则,多个线程同时访问一个共享资源,就很可能造成每个线程与这个共享资源的状态
    “异步”,即某个线程在一段时间内多次访问共享资源时,可能出现步调不一致的情况
    (此共享资源在这段时间内被其他线程修改甚至删除)不知这种解释是否准确?多谢qq7338367(.深秋小雨:让一切归于简单 快乐在指尖绽放) 以及大家的讨论!