Java 多线程环境下保证静态代码块只执行一次的解决方案
可以通过使用 synchronized 关键字来实现多线程加载类时只执行一次静态代码块的效果。可以在静态代码块前加上 synchronized 关键字,并在静态变量中添加一个标志位来判断是否已经加载过。以下是一个示例代码:
public class MyClass {
private static boolean isLoaded = false;
static {
if (!isLoaded) {
synchronized (MyClass.class) {
if (!isLoaded) {
if (System.getProperty('os.name').toLowerCase().substring(0, 3).equals('win')) {
System.load('D:\syySdfHsm\msvcr110.dll');
System.load('D:\syySdfHsm\libeay32.dll');
System.load('D:\syySdfHsm\ssleay32.dll');
System.load('D:\syySdfHsm\sdfapi_x64.dll');
System.load('D:\syySdfHsm\syySdfHsm.dll');
} else {
System.loadLibrary('syySdfHsm');
}
isLoaded = true;
}
}
}
}
// 其他类成员及方法
}
在上述代码中,isLoaded 变量用来判断是否已经加载过静态代码块。使用 synchronized 关键字将静态代码块包裹起来,确保在多线程环境下只有一个线程可以进入加载代码块。
原文地址: https://www.cveoy.top/t/topic/qqLH 著作权归作者所有。请勿转载和采集!