多线程环境下保证static代码块只执行一次的原理
多线程加载类可以保证static代码块代码只执行一次的原因是,JVM会使用一种叫做'Initialization on Demand Holder'的技术来保证在多线程环境下静态代码块只执行一次。
在多线程环境下,每个线程在加载类时都会尝试获取类的锁,如果获取成功,则继续执行类的加载过程,如果获取失败,则表示其他线程正在加载该类,当前线程会被阻塞,直到其他线程完成类的加载。
当多个线程同时尝试加载一个类时,JVM会保证只有一个线程能够获取类的锁,并执行类的加载过程。其他线程会被阻塞,直到该类加载完成。这样就能够保证static块代码只执行一次。
在上述代码中,static块中的代码会在类加载时执行。当多个线程同时加载该类时,只有一个线程能够获取类的锁,并执行static块中的代码。其他线程会被阻塞,直到该类加载完成。这样就能够保证static块代码只执行一次。
原文地址: https://www.cveoy.top/t/topic/qqKB 著作权归作者所有。请勿转载和采集!