`

Immutable

 
阅读更多

Immutable是“不能改变“的意思。如果多线程中共享的数据是不可变的(例如String、Integer),那么无论多少线程来访问这个数据都不会对使这个数据发生改变。这是也不需要synchronized来设定临界区。

public final class Person {
	private String name;
	private String address;
	public Person(String name,String address){
		this.name=name;
		this.address=address;
	}
	public String getName(){return name;}//只有访问器没有修改器
	public String address(){return address;}
	@Override
	public String toString(){
		return "["+name+","+address+"]";
	}
}

 

public class VisitThread extends Thread{
	private Person person;
	public VisitThread(Person person){this.person=person;}
	@Override
	public void run(){
		while(true)
			visit();
	}
	private void visit(){
		System.out.println(Thread.currentThread()+" visit "+person);
	}
}

 

public class ImmutableTest {
	public static void main(String[] args){
		Person p=new Person("LiLei","Beijing");
		new VisitThread(p).start();
		new VisitThread(p).start();
		new VisitThread(p).start();
	}
}

 运行结果:

Thread[Thread-2,5,main] visit [LiLei,Beijing]
Thread[Thread-2,5,main] visit [LiLei,Beijing]
Thread[Thread-1,5,main] visit [LiLei,Beijing]
Thread[Thread-1,5,main] visit [LiLei,Beijing]
Thread[Thread-1,5,main] visit [LiLei,Beijing]
Thread[Thread-0,5,main] visit [LiLei,Beijing]
Thread[Thread-2,5,main] visit [LiLei,Beijing]
Thread[Thread-2,5,main] visit [LiLei,Beijing]
Thread[Thread-2,5,main] visit [LiLei,Beijing]
Thread[Thread-2,5,main] visit [LiLei,Beijing]
Thread[Thread-1,5,main] visit [LiLei,Beijing]
Thread[Thread-1,5,main] visit [LiLei,Beijing]
Thread[Thread-1,5,main] visit [LiLei,Beijing]

 

        这种模式的参与者是不可变的对象,尽管它是共享数据,但是它不会得到修改,它不需要用synchronized,能够自由被访问。这时可以将对象的字段设置为final。

        如果一个类声明为final,那么它无法被继承;如果的实例方法声明为final,那么它无法被覆盖(override),如果将类方法声明为final,那么子类无法看到这个方法,如果字段声明为final,那么final字段的值只能被指定一次。通常,final字段初始化在定义时、构造器里面静态初始化块里面实现。

 

 

 

 

 

分享到:
评论

相关推荐

    Immutable详解及React中实践.pdf

    "Immutable 详解及 React 中实践" Immutable 是一种编程概念,指的是一旦创建,就不能再被更改的数据。它可以解决共享的可变状态问题,提高应用的性能和可维护性。本文将对 Immutable 的概念、实现原理、常见库和在...

    kotlinx.collections.immutable,Kotlin的不可变集合原型.zip

    在Kotlin编程语言中,`kotlinx.collections.immutable`是一个重要的库,它提供了不可变集合的实现。不可变集合是一旦创建后就不能修改的集合,这种数据结构在多线程环境、函数式编程和构建安全的数据模型时非常有用...

    前端开源库-immutable-core

    **前端开源库-immutable-core详解** 在前端开发领域,优化性能和提高代码可维护性是开发者不断追求的目标。为此,各种工具和库应运而生,其中“immutable-core”是一个非常重要的概念,它代表着一种不可变数据处理...

    前端开源库-immutable-ai

    **前端开源库 Immutable.js** Immutable.js 是一个 JavaScript 库,由 Facebook 的 React 团队开发并维护,它为开发者提供了一种在前端开发中高效处理数据的方法。该库的核心概念是不可变数据,即一旦创建,数据就...

    Node.js-immutable-Javascript不可变的持久化数据集合

    为了解决这些问题,`immutable.js` 库应运而生,它为Node.js开发引入了不可变数据集合的概念,同时也融入了函数式编程的思想。`immutable.js` 提供了一组高效、线程安全的数据结构,如列表(List)、映射(Map)、集...

    immutabilityutil一个开源immutabledata的轮子

    它提供了一种轻量级的解决方案,对于那些不想引入更大库如Immutable.js的项目来说,是一个不错的选择。 在“immutability-util-master”这个压缩包中,可能包含了源代码、示例、测试和文档等资源,供开发者学习和...

    技术分享之immutable.js.pptx

    简单介绍Immutable.js的一个ppt,主要用于技术分享,内容为imuutabe常用的数据类型和常用的基础api,还有immutable的原理、优缺点的分析。

    Docker and Immutable Infrastructure

    1.Overview of Docker the company and growth 2.Overview of Docker the latest stuff (DCUS announcements) & CaaS;...4.Docker and Immutable infrastructure/Microservices working together.

    Mastering Immutable.js epub

    Mastering Immutable.js 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Android代码-kotlinx.collections.immutable

    Immutable Collections Library for Kotlin Immutable collection interfaces and implementation prototypes for Kotlin. For further details see the proposal. Prototype implementation is based on ...

    go-immutable-radix, 在Golang中,一个不可变的基数树实现.zip

    go-immutable-radix, 在Golang中,一个不可变的基数树实现 go-immutable-radix 提供实现不可变 radix的iradix 包。 包只提供单个 Tree 实现,针对稀疏节点优化。作为一个基数树,它提供以下内容:O(k) 操作。在许多...

    immutable_queue.rar_ImmutableQue_ImmutableQueue_immutable queue_

    在IT领域,不可变对象(Immutable Object)是一种一旦创建就无法改变其状态的对象。这种特性在多线程编程、函数式编程以及数据安全等方面有着重要的应用。不可变队列(Immutable Queue)是其中的一种实现,它不允许...

    dot-prop-immutable, 点prop的不可变版本,带有一些扩展名.zip

    dot-prop-immutable, 点prop的不可变版本,带有一些扩展名 dot-prop-immutable 点prop的不可变版本,带有一些扩展名。npm install dot-prop-immutable这个模块的动机是在不改变普通JavaScript对象的现有状态的情况

    kotlinx.collections.immutable, Kotlin的不可变集合 Prototype.zip

    kotlinx.collections.immutable, Kotlin的不可变集合 Prototype Kotlin的不可变集合库 Kotlin的不可变集合接口和实现 Prototype 。有关详细信息,请参阅建议列表。Prototype实现基于 pcollections ( 版权 2015的作者...

    前端大厂最新面试题-immutable.docx

    Immutable.js 库在 React 项目中的应用和优化 Immutable.js 库是 JavaScript 中的一种不可变数据结构实现,旨在解决 JavaScript 中缺乏不可变数据结构的问题。通过使用 Immutable.js 库,可以在 React 项目中实现...

    immutable 与 React 、 Redux 结合使用小案例

    本项目主要利用 React 技术,结合immutable.js 与 Redux 实现了简单列表的增加功能,帮助初学者了解并学会简单使用 React 结合 Redux 及 Reducer 实现某些功能 本项目在下载后直接用 VSCode 打开即可运行,如果出现...

    ToDo-react-redux-immutable, ToDo应用显示使用反应,重现和ImmutableJS的最佳实践.zip

    ToDo-react-redux-immutable, ToDo应用显示使用反应,重现和ImmutableJS的最佳实践 技巧,技巧和最佳实践,使用反应,重现和 ImmutableJS请检查文章解释逻辑> ...ToDo应用演示如何使用Red

    immutable学习的一些入门总结

    ### Immutable.js 学习入门总结 #### 一、概述 在深入探讨Immutable.js的各种功能之前,我们先来简要了解一下这个库。Immutable.js是一个用于JavaScript的不可变数据结构库,它提供了一系列的数据结构来帮助开发者...

    react-react面试题之对immutable的理解.zip

    本文将深入探讨React面试中常问到的“对Immutable的理解”这一主题。 一、什么是不可变性? 不可变性(Immutability)指的是数据一旦创建,就不能再被修改。在JavaScript中,基本类型的值(如字符串、数字和布尔值...

    react性能优化达到最大化的方法 immutable.js使用的必要性

    本文将深入探讨如何优化React应用的性能,并详细阐述immutable.js在这一过程中的必要性和应用。 首先,React的性能优化通常涉及到两个核心概念:虚拟DOM和组件的更新。虚拟DOM是一种编程概念,React使用它来减少...

Global site tag (gtag.js) - Google Analytics