java的类构造方法只能执行一次(不考虑多个类加载器和类卸载的情况),由jvm隐式加锁保护完成。
因此,在clinit方法的实现时,要尽量简单,避免复杂的操作,尤其是加锁的操作,避免monitor lock和clinit的隐式锁构成死锁。
以下是一些验证代码。
import org.junit.Test;
class User {
//一个类的clinit方法只能执行一次(不考虑多个类加载器和类卸载的情况),由jvm加锁保护。
static {
System.out.println("User's clinit start.");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("User's clinit end.");
}
}
public class Example {
@Test
public void test() throws Exception {
final Thread t1 = new Thread(new Runnable() {
public void run() {
User user = new User();
System.out.println("t1 done with " + user);
}
});
//clinit的锁和class object的monitor lock无关。
final Thread t2 = new Thread(new Runnable() {
public void run() {
synchronized (User.class) {
System.out.println("t2 done");
}
}
});
//clinit只能执行一次,并且有锁保护。
final Thread t3 = new Thread(new Runnable() {
public void run() {
User user = new User();
System.out.println("t3 done with " + user);
}
});
t1.start();
Thread.sleep(2000);
t2.start();
t3.start();
t1.join();
t2.join();
t3.join();
}
}
分享到:
相关推荐
medical clinic management system
Clinic - Operating room 1.0.unitypackage
Clinic
An Attention-Based BiLSTM-CRF Model for Chinese Clinic Named Entity Recognition;基于注意力的 BiLSTM-CRF 模型 中国门诊病历文本命名实体识别
pet-clinic 是spring的一个例子,用maven工具进行操作,比较好的spring demo
clinic.c
howto-clinic.pdf
Clinic.js 开源Node.js性能分析套件。 演示和详细文档: : 安装 npm install -g clinic 入门 第一步,请运行clinic doctor : clinic doctor -- node server.js 然后使用wrk或autocannon对服务器进行基准测试:...
DB2® 10 for LUW Performance Tuning and Monitoring Clinic Hands-On Labs Workbook
Visteon Advanced Product Research Clinic Results.pdf
Clinic Control 是一个 Web 应用程序,它将控制和管理控制患者、医生的日程安排、病史、库存、现金控制以及许多其他功能,可帮助您在小型医疗中心控制一切。
--Young Neurosurgeon's News Written by leading skull base surgeons from the renowned House Clinic inLos Angeles, California, Lateral Skull Base Surgery: The House Clinic Atlas is a much-needed ...
关于Visteon Advanced Product Research Clinic Results的介绍说明.rar
Aspnet-WA-Will-Clinic.zip,华盛顿兽医诊所将为符合条件的美军退伍军人提供免费的遗产规划文件。,asp.net是一个开源的web框架,用于使用.net构建现代web应用和服务。asp.net创建基于html5、css和javascript的网站,...
最小的错误远程主题启动器单击上方的“按钮,以最快的方式入门“。 包含基本配置,以使您拥有一个网站: 样本帖子。 示例顶部导航。 带有社交链接的示例作者侧边栏。 样本页脚链接。 分页首页。...
错误诊所一个nodeschool.io风格的讲习班,用于学习如何调试Node.js应用程序 请注意,这仅完成了2/3,但是您可能仍会学到一些东西$ sudo npm --global install bug-clinic$ bug-clinic贡献者执照bug-clinic版权所有...
node-clinic安装npm install -g诊所入门首先,运行诊所医生:诊所医生-node server.js,然后使用wrk或autocannon对服务器进行基准测试:wrk http:// lo Clinic.js一个开源NearForm提供的Node.js性能分析套件。 演示...
诊所管理系统 用C编写的简单程序使用链接列表来存储与诊所管理有关的数据。 为课程“数据结构”开发的一个迷你项目。
clinic99.com
clinic:招聘任务