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; } }