zoukankan      html  css  js  c++  java
  • 多线程this逃逸

    this逃逸,  是指在构造函数返回之前,其它线程就持有该对象的引用,调用尚未构造完全的对象的方法,可能引发令人疑惑的错误,应该避免this逃逸事件的发生。

    this逃逸经常发生在构造函数中启动线程或注册监听器时, 如:

    public class ThisEscape {
    
    public ThisEscape() {
    
    
    new Thread(new EscapeRunnable()).start();
    
    
    // ...
    
    }
    
    
    
    private class EscapeRunnable implements Runnable {
    
    
    @Override
    
    
    public void run() {
    
    
    
    // 通过ThisEscape.this就可以引用外围类对象, 但是此时外围类对象可能还没有构造完成, 即发生了外围类的this引用的逃逸
    
    
    }
    
    }
    }

    在构造函数中创建Thread对象是没有问题的,但是不要启动Thread,可以提供一个init方法,如下:

    public class ThisEscape {
    
    private Thread t;
    
    public ThisEscape() {
    
    
    t = new Thread(new EscapeRunnable());
    
    
    // ...
    
    }
    
    
    
    public void init() {
    
    
    t.start();
    
    }
    
    
    
    private class EscapeRunnable implements Runnable {
    
    
    @Override
    
    
    public void run() {
    
    
    
    // 通过ThisEscape.this就可以引用外围类对象, 此时可以保证外围类对象已经构造完成
    
    
    }
    
    }
    }
  • 相关阅读:
    3. VIM 系列
    2. VIM 系列
    2. 修复FFMPEG 复用 PAT、PMT发送间隔小于25ms的错误
    1. VIM 系列
    RESTful风格API
    APIview的使用
    1.DRF初始化
    Linux下的django项目02
    Linux下的django项目01
    1,web项目工作流程
  • 原文地址:https://www.cnblogs.com/zqsky/p/7082924.html
Copyright © 2011-2022 走看看