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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵鸿富 中级黑马   /  2013-3-16 20:49  /  2418 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵鸿富 于 2013-3-17 17:16 编辑

什么是线程同步????

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 加油~~~

查看全部评分

4 个回复

倒序浏览
    线程同步就是在多个线程运行过程中,不会在同一个时刻并发访问同一个公共属性或方法,也许这样你不好理解,那给你举个例子啊。
    从字面上看,同步就是一起走,一起停的意思,假设有一间房子,每次只能进入一个人才正常,如果在同一时刻进入了两个人那就会出现异常,所以怎么解决这个问题呢,那就让所有人同时走同时停,那样当有一个人进入房子的时候,就会停下,其他的人也不会再次进入,因为都停下了,就不会发生一个房间同时进入多个人的情况。那么这样就是“房屋”安全的,专业一点就是线程安全的,线程同步的。当然也可以用给房子门上“锁”的例子来解释,意思差不多,但我觉得没这个例子直观,呵呵,可能例子有瑕疵,但初步理解线程同步还可以,但愿对楼主有帮助。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
多线程运行,当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行。导致共享数据的错误。
解决办法:对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行,就是同步。
  1. public synchronized void add(int n)//同步函数,和同步块功能一样
  2.         {
  3.                 sum=sum+n;
  4.                 System.out.println("sum="+sum);
  5.         }
复制代码
比如有两个线程t1和t2会执行上面的代码,如果t1进入同步函数,执行对sum操作的两条语句,执行完,t2才可以进入同步函数操作。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
若仍有问题,请继续追问或完善问题;没问题的话,请将帖子分类改成【已解决】~
回复 使用道具 举报
我是这么理解的,不知道对不对:

        当多个线程对同一个对象(同一资源)进行访问时,
        由于CPU对线程的调度有所不同,线程间的相互影响会
        对同一个对象(同一资源)产生不同结果,造成程序逻辑错误,
        所以对多个线程间的影响进行协调操作就统称为线程同步。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马