黑马程序员技术交流社区

标题: 什么是线程同步 [打印本页]

作者: 赵鸿富    时间: 2013-3-16 20:49
标题: 什么是线程同步
本帖最后由 赵鸿富 于 2013-3-17 17:16 编辑

什么是线程同步????
作者: 郝强勇    时间: 2013-3-16 21:09
    线程同步就是在多个线程运行过程中,不会在同一个时刻并发访问同一个公共属性或方法,也许这样你不好理解,那给你举个例子啊。
    从字面上看,同步就是一起走,一起停的意思,假设有一间房子,每次只能进入一个人才正常,如果在同一时刻进入了两个人那就会出现异常,所以怎么解决这个问题呢,那就让所有人同时走同时停,那样当有一个人进入房子的时候,就会停下,其他的人也不会再次进入,因为都停下了,就不会发生一个房间同时进入多个人的情况。那么这样就是“房屋”安全的,专业一点就是线程安全的,线程同步的。当然也可以用给房子门上“锁”的例子来解释,意思差不多,但我觉得没这个例子直观,呵呵,可能例子有瑕疵,但初步理解线程同步还可以,但愿对楼主有帮助。
作者: 孙娜    时间: 2013-3-16 22:59
多线程运行,当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行。导致共享数据的错误。
解决办法:对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行,就是同步。
  1. public synchronized void add(int n)//同步函数,和同步块功能一样
  2.         {
  3.                 sum=sum+n;
  4.                 System.out.println("sum="+sum);
  5.         }
复制代码
比如有两个线程t1和t2会执行上面的代码,如果t1进入同步函数,执行对sum操作的两条语句,执行完,t2才可以进入同步函数操作。
作者: 陈丽莉    时间: 2013-3-17 13:32
若仍有问题,请继续追问或完善问题;没问题的话,请将帖子分类改成【已解决】~
作者: 吊丝男    时间: 2013-12-17 00:38
我是这么理解的,不知道对不对:

        当多个线程对同一个对象(同一资源)进行访问时,
        由于CPU对线程的调度有所不同,线程间的相互影响会
        对同一个对象(同一资源)产生不同结果,造成程序逻辑错误,
        所以对多个线程间的影响进行协调操作就统称为线程同步。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2