>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 26283 个阅读者 刷新本主题
 * 贴子主题:  [讨论]书中多线程章节的语言表述有误? 回复文章 点赞(0)  收藏  
作者:雪后初晴    发表时间:2020-06-07 18:27:47     消息  查看  搜索  好友  邮件  复制  引用


《Java面向对象编程》,p420页,表13-3下面的那段话,原文为:
由此可见,对于生产者线程而言,getPoint和push方法必须为一个原子操作。
当producer1线程执行这个原子操作时,其他线程不允许修改Stack对象的point属性

我认为应修改为:
当producer2线程执行这个原子操作时,其他线程不允许访问Stack对象的point属性

我的思考如下:producer2线程没有将point++前,producer1不允许getPoint获取(访问)point。
这样就不会出现2个goods7。



程序猿的技术大观园:www.javathinker.net

[这个贴子最后由 雪后初晴 在 2020-06-07 20:46:21 重新编辑]
  Java面向对象编程-->对象的生命周期
  JavaWeb开发-->开发JavaMail Web应用
  JSP与Hibernate开发-->映射对象标识符
  Java网络编程-->创建非阻塞的HTTP服务器
  精通Spring-->Vue指令
  Vue3开发-->Vue指令
  [求助] 如何观看孙老师的课程视频
  java的三种随机数生成方式
  ThreadLocal的内存泄露的原因分析以及如何避免
  Java Optional 解决空指针异常总结
  使用策略模式优化代码实践,如何让项目快速起飞
  用注解去代替if-else的技巧
  不修改源代码,动态注入Java代码的方法
  Eclipse使用指南:快速修复功能
  正则表达式:运算符优先级
  Java入门实用代码:获取远程文件大小
  Java入门实用代码:自定义异常
  Java 入门实用代码:设置文件只读
  Java入门实用代码:数组元素的反转
  Java线程实现龟兔赛跑
  java零基础入门-面向对象篇 抽象类
  更多...
 IPIP: 已设置保密
楼主      
该用户目前不在线 雪后初晴 
  
威望: 0
级别: 新手上路
魅力: 142
经验: 142
现金: 1068
发文章数: 8
注册时间: 0001-01-01
 消息  查看  搜索  好友  邮件  复制  引用


原文中表格如下:
时间序列    |    point    |    producer2线程    |    producer1线程

1                6            获得同步锁,执行
                            getPoint()方法,返回
                            6,释放同步锁... ...

2                6                                    获得同步锁,执行
                                                      getPoint()方法,返回
                                                      6,释放同步锁... ...

...                    ...                    ...                    ...



既然producer2线程先执行了getPoint(),那么在它后续push操作没有返回时,producer1
线程就不应该被允许调用getPoint(),从而导致2个goods7 的问题。

也就是producer2在执行原子操作时,producer1不能访问Stack中的point属性。
请问老师我的理解是正确的吗?
发文章时间 2020-06-07 20:52:58
 IPIP: 已设置保密 1 楼     
该用户目前不在线 sunweiqin 
  

威望: 0
级别: 高级天王 [荣誉]
魅力: 480
经验: 480
现金: 1128
发文章数: 171
注册时间: 2016-09-12
 消息  查看  搜索  好友  邮件  复制  引用


你的理解是正确的。换成这样的表述最准确:

当producer1线程或producer2线程执行这个原子操作时,其他线程不允许访问Stack对象的point属性。

你觉得呢
发文章时间 2020-06-08 08:27:40
 IPIP: 已设置保密 2 楼     
该用户目前不在线 雪后初晴 
  
威望: 0
级别: 新手上路
魅力: 142
经验: 142
现金: 1068
发文章数: 8
注册时间: 0001-01-01
 消息  查看  搜索  好友  邮件  复制  引用



老师说的很准确,结合到本例子,我在您的基础上再完善一下:

当producer1线程或producer2线程执行这个原子操作时,其他线程不允许访问Stack对象的point属性。

在本例子给出的表13-3中,因为producer2先获得同步锁(对应时间序列为1),根据线程同步原则,
producer1 必须等待 producer2 执行完一些列原子操作后,才能执行另外的原子操作.所以表中producer2
列下时间序列为3的操作应提升为时间序列2,而表中producer1下时间序列为2的操作,应下降为时间序列3。
发文章时间 2020-06-10 21:35:10
 IPIP: 已设置保密 3 楼     
该用户目前不在线 雪后初晴 
  
威望: 0
级别: 新手上路
魅力: 142
经验: 142
现金: 1068
发文章数: 8
注册时间: 0001-01-01
 消息  查看  搜索  好友  邮件  复制  引用


老师请问怎么突然不能修改自己发的帖子了,有些语言后期可能要润色下,表述更准确。
发文章时间 2020-06-10 21:37:12
 IPIP: 已设置保密 4 楼     
1页 4条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。