Java多线程设计模式详解学习笔记四——Immutable

本文介绍了一个使用不可变对象实现线程安全的例子。通过创建一个不可变的Person类,确保了对象的状态在创建后不会改变,并利用该对象在一个多线程环境中实现安全的数据共享。
public class Main { public static void main(String[] args) { Person alice = new Person("Alice", "Alaska"); new PrintPeronThread(alice).start(); new PrintPeronThread(alice).start(); new PrintPeronThread(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; } @Override public String toString() { return "[Person: name: "+name+" ,address:"+address+"]"; } }public class PrintPeronThread extends Thread{ private Person person; public PrintPeronThread(Person person) { this.person=person; } @Override public void run() { while(true){ System.out.println(Thread.currentThread().getName()+" prints "+person); } } }

运行结果:

Thread-0 prints [Person: name: Alice ,address:Alaska] Thread-0 prints [Person: name: Alice ,address:Alaska] Thread-0 prints [Person: name: Alice ,address:Alaska] Thread-0 prints [Person: name: Alice ,address:Alaska] Thread-0 prints [Person: name: Alice ,address:Alaska] Thread-0 prints [Person: name: Alice ,address:Alaska] Thread-0 prints [Person: name: Alice ,address:Alaska] Thread-0 prints [Person: name: Alice ,address:Alaska] Thread-0 prints [Person: name: Alice ,address:Alaska] Thread-0 prints [Person: name: Alice ,address:Alaska] Thread-0 prints [Person: name: Alice ,address:Alaska] Thread-0 prints [Person: name: Alice ,address:Alaska]

何时使用:

1.当实例产生后,状态不再变化时

Immutable参与者是一个字段值无法改变的类,也没有任何用来改变字段的方法,所有字段设置成finall,Person没有setter方法。当Immutable参与者的实例创建以后,状态就完全不再变化。

2.实例需要共享,而且访问很频繁时

Immutable Pattern的优点,在于“不需要用synchronized保护”,这样的优点是在不丧失安全性与生命性的前提下,提高程序的执行性能。

final字段:

1.实例字段:

直接在声明字段的时候就直接赋初值

class Something{ final int value=123; }



在构造器中将值赋给字段(blank final)

class Something{ final int value; Something(){ this.value=123; } }2.静态变量

直接在声明字段的时候就直接赋初值

class Something{ final static int value=123; }


在static块(静态初始化)中将值赋给字段(blank fina)

class Something{ static final int value; static{ value=123; } }




                
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值