`

Java多线程模式之Immutable

阅读更多

Immutable:想破坏它也没有办法


 简介
  永恒的,不变的


 设计
  1。类声明为final
   不允许定义它的子类,预防子类可能修改字段值
  2。类成员访问变量为private
   预防其他类擅自修改字段值


 什么情况下使用
   1。实例产生后,状态不再变化时
   2。实例需要共享,而且访问很频繁时


 高级应用
  成对的mutable和immutable类
   如String和StringBuffer


 优点
  不需要使用synchronized保护,性能高


 可能危及类不变性操作
  直接以get方法返回字段所保存的实例
  将构造器的参数传入的实例,直接存在字段里

 

public class Main {
    public static void main(String[] args) {
        Person alice = new Person("Alice", "Alaska");
        new PrintPersonThread(alice).start();
        new PrintPersonThread(alice).start();
        new PrintPersonThread(alice).start();
    }
}


public final class Person {
    private final String name;
    private final String address;
    public Person(String name, String address) {
        this.name = name;
        this.address = address;
    }
    public String getName() {
        return name;
    }
    public String getAddress() {
        return address;
    }
    public String toString() {
        return "[ Person: name = " + name + ", address = " + address + " ]";
    }
}


public class PrintPersonThread extends Thread {
    private Person person;
    public PrintPersonThread(Person person) {
        this.person = person;
    }
    public void run() {
        while (true) {
            System.out.println(Thread.currentThread().getName() + " prints " + person);
        }
    }
}

 
 

分享到:
评论

相关推荐

    java多线程设计模式详解(PDF及源码)

    (注意,本资源附带书中源代码可供参考) 多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中...

    java多线程设计模式 (PDF中文版, 附源码)

    目录: 漫谈UML Introduction 1 Java语言的线程 Introduction 2 多线程...总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的优先级 附录D 线程相关的主要API 附录E 参考文献

    Java多线程详解

    Java多线程模式详解 目录: 一、漫谈UML Java语言的线程 多线程的评量标准 二、 1、Single Threaded Execution ———— 能通过这座桥的,只有一个人 2、Immutable ———— 想破坏它也没办法 3、Guarded ...

    java8源码-GraphicMultiThreadDesignPattern:图解Java多线程设计模式

    记录自己学习《图解Java多线程设计模式》这本书的全部过程 本书上传的所有代码都是可以运行的,在此附上本书源码地址: 在此向本书作者和译者表示感谢 运行环境 Eclipse版本:Oxygen.2 Release (4.7.2) JDK版本:jdk...

    javabiginteger源码-MultiThreadMode:多线程模式

    优点:不需使用synchronized保护类的属性,适用于类被多个线程共享,且有可能被频繁访问。 标准类中mutable类:StringBuffer 标准类中Immutable类:String、BigInteger、BigDecimal、Pattern、基本类型的包装类 java...

    JavaConcurrencyPattern:Java并发模式

    《Java多线程编程模式实战指南》系列文章配套源码。这些文章已扩充为一本书:《Java多线程编程实战指南(设计模式篇)》,由电子工业出版社出版,当当、亚马逊、京东、互动出版网、淘宝等各大书店有售。 【样章】 ...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第二阶段19讲、多线程不可变对象设计模式Immutable-上.mp4 │ 高并发编程第二阶段20讲、多线程不可变对象设计模式Immutable-下.mp4 │ 高并发编程第二阶段21讲、多线程Future设计模式详细介绍-上....

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第二阶段19讲、多线程不可变对象设计模式Immutable-上.mp4 │ 高并发编程第二阶段20讲、多线程不可变对象设计模式Immutable-下.mp4 │ 高并发编程第二阶段21讲、多线程Future设计模式详细介绍-上....

    Java的六大问题你都懂了吗

    在多线程的操作中,一个对象会被多个线程共享或修改,一个线程对对象无意识的修改可能会导致另一个使用此对象的线程崩溃。一个错误的解决方法就是在此对象新建的时候把它声明为final,意图使得它"永远不变".其实那是...

    Guava 16.0 API (CHM格式)

     com.google.common.util.concurrent:多线程工具包。  类库使用手册:  一. 基本工具类:让使用Java语言更令人愉悦。  1. 使用和避免 null:null 有语言歧义, 会产生令人费解的错误, 反正他总是让人不爽。...

Global site tag (gtag.js) - Google Analytics