>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 25334 个阅读者 刷新本主题
 * 贴子主题:  [讨论]书中多线程章节的语言表述有误? 回复文章 点赞(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面向对象编程-->面向对象开发方法概述之UML语言(下)
  JavaWeb开发-->JSP技术详解(Ⅱ)
  JSP与Hibernate开发-->Spring、JPA与Hibernate的整合
  Java网络编程-->非阻塞通信
  精通Spring-->通过Vuex进行状态管理
  Vue3开发-->CSS过渡和动画
  CRMEB_Java新零售社交电商系统
  求素数
  BIO和NIO区别
  [讨论]书中多线程章节的图示有误?
  害怕面试被问HashMap?
  Java关键字final、static使用总结
  Java设计模式:抽象工厂模式
  java常见的几种调用机制:同步调用,异步调用,回调
  Java多线程volatile详解
  JNI_Java Native Interface的用法
  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前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。