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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wochaowoliuxing 中级黑马   /  2014-6-28 23:08  /  813 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程会出现安全问题啊?大家来交流一下

3 个回复

倒序浏览
当一个线程在执行多条语句时,并运算同一个数据时,在执行过程中,其他线程参与进来,并操作了这个数据。导致到了错误数据的产生。
1,多个线程在操作共享数据。
2,有多条语句对共享数据进行运算。
因为cpu执行多条语句,在某一个时刻被一个线程执行时,还没有执行完,就被其他线程执行了。
所以只要将操作共享数据的语句在某一时段让一个线程执行完,在执行过程中,其他线程不能进来执行就可以解决这个问题。
java中提供了一个解决方式:就是同步代码块。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
JDK1.5版本升级时,推出一个接口Lock接口。直接将锁封装成了对象。线程进入同步就是具备了锁,执行完,离开同步,就是释放了锁。
在后期对锁的分析过程中,发现,获取锁,或者释放锁的动作应该是锁这个事物更清楚。所以将这些动作定义在了锁当中,并把锁定义成对象。

所以同步是隐示的锁操作,而Lock对象是显示的锁操作,它的出现就替代了同步。
现在锁是指定对象Lock。所以查找等待唤醒机制方式需要通过Lock接口来完成。而Lock接口中并没有直接操作等待唤醒的方法,而是将这些方式又单独封装到了一个对象中。这个对象就是Condition,将Object中的三个方法进行单独的封装。并提供了功能一致的方法 await()、signal()、signalAll()体现新版本对象的好处。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
歸羽 发表于 2014-6-28 23:53
当一个线程在执行多条语句时,并运算同一个数据时,在执行过程中,其他线程参与进来,并操作了这个数据。导 ...

也就是说同步了就安全了吗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马