java并发编程笔记----发布与逸出

首先定义一下java

并发编程中的发布定义:编程

    发布就给做用域以外的代码提供引用/对象,例如return操做 或者 将对象当作参数传递给方法使用,
    这个现象就是发布并发

并发编程中的逸出:函数

    就是在对象的构造器还未执行完成 就发布了对象(不必定就是本身,也多是static修饰的属性或者代码块内部的对象)
    给做用域以外的代码使用  的现象this

逸出现象源码线程

public class ObjectPublish {

    public static HashSet<Person> persons ;
	    public void init()
	    {
		persons = new HashSet<Person>();
	    }
    
    }
    或者在构造器中 直接使用匿名内部类,而后给属性在赋值,这种代码顺序会形成this对象逸出
    例如
    public class ConstructorEscape {
    public ConstructorEscape(EventSource eventSource)
    {
        eventSource.registerListener(
                    new EventListener(){
                        public void OnEvent(Event e)
                        {
                            doSomeThing(e);
                        }
                    }
                );
    }
}

避免隐式逸出的方式能够使用工厂:code

package com.codeartist;

public class ConstructorEscape {
    private final EventListener listener;
    
    private  ConstructorEscape()
    {
        this.listener=    new EventListener(){
            public void OnEvent(Event e)
            {
                doSomeThing(e);
            }
        };        //这里将发布的对象 给的做用域内的代码使用
    }
    
    public static ConstructorEscape getInstance(EventSource eventSource)
    {
        ConstructorEscape  instance = new ConstructorEscape();
        eventSource.registerListener(instance.listener);
        return instance;
    }    
}

普通的逸出处理(含this引用):对象

一、不要在构造函数中启动新线程,取而代之的是在其余初始化或启动方法中启动对象拥有的线程。
二、千万不要在父类构造方法中调用被子类覆盖的方法。作用域

相关文章
相关标签/搜索