美文网首页
类初始化死锁

类初始化死锁

作者: 砺豪 | 来源:发表于2017-04-09 19:28 被阅读52次

http://mp.weixin.qq.com/s/UwEO8hFq-EL3a_VjMRydkA

class A{
    static {
        String a="a init";
        System.out.println(a);
        B.testB();
        System.out.println("init  A -->  B.testB();");

    }

    public static void testA(){
        System.out.println("a.testA");
    }

}



class B{
    static {
        String b="b init";
        System.out.println(b);
        A.testA();
        System.out.println("init  B -->  A.testA();");

    }

    public static void testB(){
        System.out.println("b.testB");
    }

}

public class TestAB {
    public static void main(String[] args) {

        // 单线程有可重入性,所以不会死锁
        // 多线程在执行<clinit> 时,会死锁。
        new Thread(() -> A.testA()).start();

        new Thread(() -> B.testB()).start();
    }

}

当有个线程正在执行这个类的clinit方法的时候,就会设置这个类的状态为being_initialized,
当正常执行完之后就马上设置为fully_initialized,然后才唤醒其他也在等着对其做初始化的线程继续往下走
如果已经是fully_initialized了说明有线程已经执行完了clinit方法,因此不会再执行clinit方法了。

相关文章

  • 类初始化死锁

    http://mp.weixin.qq.com/s/UwEO8hFq-EL3a_VjMRydkA 当有个线程正在执...

  • 类初始化造成的死锁

    1.死锁是怎么产生的 类初始化是一个很隐蔽的操作,是由虚拟机主导完成的,开发人员不了解类加载机制的话,可能压根不知...

  • 类初始化导致死锁

    一张图简单描述死锁 如上图,Thread1 拿到了 object1,Thread2 拿到了 object2,但是现...

  • 类初始化造成的死锁

    https://www.jianshu.com/p/8e8a5a773648

  • Java死锁检测之ThreadMXBean

    看此文章前请先了解之前一篇文章 "Java死锁之理解死锁" 中的死锁示例java 中提供了可以检测死锁的工具类Th...

  • 类加载机制(1)类加载过程

    目录 一、什么是类的加载(类初始化)[#jump1]1、分清类初始化和对象初始化[#jump1_1]2、类的初始化...

  • 十二、初始化

    初始化 类、结构体、枚举都可以定义初始化器 (本章主要讲类的初始化) 类有2种初始化器 指定初始化器 便捷初始化器...

  • Java学习笔记 - 类方法与代码块的执行顺序

    类的初始化顺序 静态初始化块位于类的第一次初始化最前端执行,先父类后子类,是类的初始化块。 初始化块位于每次对象被...

  • 类初始化死锁导致线程被打爆!打爆!爆!

    本文来自: PerfMa技术社区PerfMa(笨马网络)官网 概述 之前写过关于类加载死锁的文章,消失的死锁,说的...

  • swift初始化器

    初始化器 类、结构体、枚举都可以定义初始化器 类初始化器 类有2种初始化器:指定初始化器(designated i...

网友评论

      本文标题:类初始化死锁

      本文链接:https://www.haomeiwen.com/subject/shxjattx.html