返回信息流还是我最喜欢的话题:看下面的程序:
class Letter {
public String subject = null;
public String text = null;
}
class MailBox {
private volatile Letter letter = null;
public void putLetter(String subject, String text) {
Letter l = new Letter();
l.subject = subject;
l.text = text;
letter = l;
}
public void showLetter() {
Letter l = letter;
if (l != null) {
System.out.format("Subject: %s\nText:%s\n", l.subject, l.text);
}
}
}
有人担心:如果putLetter和showLetter在两个线程里做,这个程序有可能不是线程安全的。比如,这个程序完全没有锁或者synchronized语句,不加锁而更改letter变量会出问题;或者,一个CPU的读写在另一个CPU看来可能是错序的,而Letter里面subject和text都不是volatile的,会不会showLetter里看到l!=null,但l.subject或者l.text会是null。
元芳,你怎么看?
“我看这事必有蹊跷,这涉及到不少细节。”
这是一条镜像帖。来源:北邮人论坛 / java / #39709同步于 2015/4/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
Re: Re: Re: [问题]对于Java的学习,好困惑。。。
nuanyangyang
2015/4/3镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
多线程渣完全不知所云..
【 在 nuanyangyang (暖羊羊) 的大作中提到: 】
: 还是我最喜欢的话题:看下面的程序:
: [code=java]
: class Letter {
: ...................
看不懂、、 暖神指导指导
【 在 nuanyangyang 的大作中提到: 】
: 还是我最喜欢的话题:看下面的程序:
:
: [code=java]
: class Letter {
: public String subject = null;
: public
: .........
发自「贵邮」
【 在 kafei123 的大作中提到: 】
: 看不懂、、 暖神指导指导
:
: 发自「贵邮」
关于这个话题,最好的文档就是Java自带的教程了。
https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html
特别留意一下happen before这个词,这个词在教程里到处都出现。
另外我不认为“以Java为主的人,基础知识会薄弱”。高级语言的目的就是提供抽象的表示。这方面,C和Java都是一样的,都是抽象,只是很多C程序员以为自己离底层比较近。
如果有兴趣,可以去学学C,体验一下手动动态存储空间分配(malloc和free)的不便。
另外,很多操作系统的接口都是用C语言描述的,比如socket,mmap什么的。有兴趣可以看看。希望你已经在使用Linux或者Mac之类的类似unix的操作系统了。
我这个英文水平有点欠缺,读英文文档有点费劲了,暖神能不能给我推荐几本书,我想从基础系统的学学java,现在除了会点javaweb别的都不大了解,知识面也很窄 也没用过linux 和mac系统 , 求暖神多指导指导 感激感激[ema23]
【 在 nuanyangyang 的大作中提到: 】
:
: 关于这个话题,最好的文档就是Java自带的教程了。
: https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html
: ...................
nuanyangyang威武
【 在 nuanyangyang 的大作中提到: 】
: 还是我最喜欢的话题:看下面的程序:
: [code=java]
: class Letter {
: ...................
请尽快习惯阅读英文文档,毕竟全世界大多数关于计算机的文档是英文的,中文的只是很少的一部分,要等翻译,比原文晚很多,而且翻译会引发错误。其实计算机相关的英文不难,只有高中的词汇,不认识的基本上都是术语,文档里会解释的。
学Linux很重要,接触过linux的和没有接触过的相差很大。如果不想换操作系统,就装个虚拟机(比如开源的virtualbox),然后下载一个ubuntu的光盘iso往虚拟机里装吧。( http://mirror.bit.edu.cn/ubuntu-dvd/14.04.2/release/ubuntu-14.04.2-desktop-amd64+mac.iso )
【 在 kafei123 的大作中提到: 】
: 我这个英文水平有点欠缺,读英文文档有点费劲了,暖神能不能给我推荐几本书,我想从基础系统的学学java,现在除了会点javaweb别的都不大了解,知识面也很窄 也没用过linux 和mac系统 , 求暖神多指导指导 感激感激
谢谢暖神提醒,我试着开始读英文文档。关于linux 该学哪些东西?暖神推荐本linux的书吧。
【 在 nuanyangyang 的大作中提到: 】
: 请尽快习惯阅读英文文档,毕竟全世界大多数关于计算机的文档是英文的,中文的只是很少的一部分,要等翻译,比原文晚很多,而且翻译会引发错误。其实计算机相关的英文不难,只有高中的词汇,不认识的基本上都是术语,
: .........
发自「贵邮」