`
wjm251
  • 浏览: 110026 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

<Java concurrency in practice>说这个代码不安全,记一下,慢慢理解

    博客分类:
  • java
阅读更多
class Holder {
    private int n;

    public Holder(int n) { this.n = n; }

    public void assertSanity() {
        if (n != n)
            throw new AssertionError("This statement is false.");
    }
}

public class test {
    public Holder holder;

    public void initialize() {
        holder = new Holder(42);
    }

}
======================================
当再有另外一个线程B(即不同于new Holder的这个线程A)调用assertSanity,居然有可能抛出异常来。还说如果把Holder中的n标为final就可以解决,

当然,如果想B线程即时看到A线程对holder的改动,holder还是需要定为volatile的。
太神奇了,照这本书里的这些说法,公司系统里头的代码简直全是隐患啊,只是碰巧能工作,说不定啥时候就爆出个莫名其妙的问题来。

以下是书中描述的final的特殊功效。
===========================
but they also have special semantics under the Java Memory Model. It is the use of final fields that makes possible the guarantee of initialization safety (see Section 3.5.2) that lets immutable objects be freely accessed and shared without synchronization.
分享到:
评论
1 楼 a999888huang 2015-09-25  
这个极难重现。。。
虽然根据Java® Language Specification 8th 的
https://docs.oracle.com/javase/specs/jls/se8/html/jls-17.html#jls-17.4
17.5 的An object is considered to be completely initialized when its constructor finishes. A thread that can only see a reference to an object after that object has been completely initialized is guaranteed to see the correctly initialized values for that object's final fields.

说明它不是final的可能会问题。不过,至少是百万级的。

相关推荐

    java并行编程(Java Concurrency in Practice) 英文版chm

    &lt;&lt;java并行编程&gt;&gt;英文版chm格式,英文名称&lt;Java Concurrency in Practice&gt;,一直想买这本书,但总是缺货,找到了电子版,分享给大家。 Java Concurrency in Practice By Brian Goetz, Tim Peierls, Joshua Bloch,...

    Java Concurrency in Practice 无水印pdf

    Java Concurrency in Practice 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者...

    Java Concurrency in Practice

    Java Concurrency in practice

    Java并发编程实践(java concurrency in practice)pdf (java多线程总结.ppt)

    这本书深入浅出地探讨了Java平台上的并发问题,帮助读者理解和掌握如何编写高效、可靠且可维护的多线程应用程序。以下是该书及其配套PPT中涵盖的一些关键知识点: 1. **线程基础**:首先,书中会介绍线程的基本概念...

    Java Concurrency in Practice JAVA并发编程实践(中英文版)

    Using the concurrency building blocks in java.util.concurrent Performance optimization dos and don'ts Testing concurrent programs Advanced topics such as atomic variables, nonblocking algorithms, ...

    Java Concurrency in Practice JAVA并发编程实践中文版(全)

    Java Concurrency in Practice JAVA并发编程实践中文版(全)第二部分

    java concurrency in practice

    java concurrency in practice 经典的多线程编程书籍,英文版

    Java Concurrency in Practice.zip

    《Java Concurrency in Practice》是Java并发编程领域的一本经典著作,由Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowles和Doug Lea等专家共同编写。这本书深入探讨了Java平台上的多线程和并发编程,旨在...

    Java Concurrency In Practice Learning Note

    本笔记将深入探讨《Java Concurrency In Practice》这本书中的核心概念,结合Guava库的实际使用案例,帮助读者理解并掌握Java并发编程的精髓。 首先,我们来了解Java并发的基础知识。Java提供了丰富的并发工具类,...

    Java Concurrency In Practice.pdf

    以上内容概述了《Java Concurrency In Practice》这本书中所涉及的关键知识点和技术细节,希望能为读者提供有价值的参考和启示。通过深入学习这些内容,开发者可以更好地掌握Java并发编程的基本原理和最佳实践,从而...

    Concurrent_Programming+Java Concurrency in Practice+langspec

    首先,"Java Concurrency in Practice"是Java并发编程的经典之作,由Brian Goetz、Tim Peierls、Joshua Bloch、David Holmes和Doug Lea合著。这本书提供了一套实用的指导原则、设计模式和最佳实践,帮助Java开发者...

    Java并发实践英文版(Java Concurrency in Practice)

    - **书名**:《Java并发实践》(Java Concurrency in Practice) - **作者**:Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea - **出版社**:Addison Wesley Professional - **...

    java_concurrency_in_practice_source源代码

    这里的"java_concurrency_in_practice_source"源代码正是书中实例的实现,它涵盖了Java多线程编程中的关键概念和技术。 1. **线程基础**:Java中创建线程有两种方式,一是通过`Thread`类的子类,二是实现`Runnable`...

    Java Concurrency in Practice电子书PDF加源码包

    java_concurrency_in_practice.pdf jcip-examples-src.jar jcip-annotations-src.jar 英文版是高清晰的,实战和实践都是同一帮人对英文版书的翻译,网传实战的翻译质量更好,实战是2012年出版的,应该是对前一版实践...

    Java Concurrency in Practice中文版

    这本书很出名吧,大家都知道吧,我靠,20个字的描述咋这么累啊。

Global site tag (gtag.js) - Google Analytics