`
zhang_xzhi_xjtu
  • 浏览: 538733 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

类构造函数clinit尽量简单化

    博客分类:
  • java
 
阅读更多
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();
    }
}
分享到:
评论

相关推荐

    howto-clinic.pdf

    其主要目的是自动化所有在编写CPython内置函数(builtins)的参数解析代码时涉及的样板代码。文档内容分为两部分,首先是基础使用和如何将你的第一个C函数转换成与Argument Clinic兼容的格式,然后介绍一些高级主题...

    Clinic-Management-PHP-MySQL-Source-Codes.zip_clinic_clinic php

    标题中的"Clinic-Management-PHP-MySQL-Source-Codes.zip_clinic_clinic php"表明这是一个基于PHP和MySQL开发的诊所管理系统源代码包。这个系统主要用于管理医疗诊所的日常运营和患者服务。从描述中我们可以了解到,...

    Clinic - Operating room 1.0.unitypackage.zip

    《Clinic - Operating Room 1.0:Unity3D中的医疗场景构建》 Unity3D作为全球领先的实时3D创作工具,广泛应用于游戏开发、虚拟现实(VR)、增强现实(AR)、模拟仿真以及电影级视觉效果等领域。在这款名为"Clinic - ...

    An Attention-Based BiLSTM-CRF Model for Chinese Clinic NER

    An Attention-Based BiLSTM-CRF Model for Chinese Clinic Named Entity Recognition;基于注意力的 BiLSTM-CRF 模型 中国门诊病历文本命名实体识别

    node-clinic:Clinic.js诊断您的Node.js性能问题

    Clinic.js 开源Node.js性能分析套件。 演示和详细文档: : 安装 npm install -g clinic 入门 第一步,请运行clinic doctor : clinic doctor -- node server.js 然后使用wrk或autocannon对服务器进行基准测试:...

    cpp_code_clinic

    3. **构造函数与析构函数**: 构造函数用于初始化新创建的对象,而析构函数则在对象生命周期结束时执行清理工作。这两个函数的名字与类名相同,且构造函数没有返回类型。 4. **继承与多态**: 继承允许一个类(子类)...

    clinic.c

    clinic.c

    Clinic

    标题"Clinic"很可能指的是一个基于C#编程语言开发的医疗诊所管理软件或系统。这个系统可能涵盖了诊所日常运营的...对于想要提升自己在医疗信息化领域技能的程序员来说,参与"Clinic"这样的项目将是一次宝贵的学习机会。

    pet-clinic.zip

    Spring Data JPA提供了与数据库交互的高级抽象,通过简单的方法就能实现复杂的查询,如Repository接口的使用。 4.3 Thymeleaf模板引擎 Thymeleaf用于动态生成HTML,结合Spring MVC,可以方便地实现前后端数据绑定。...

    Clinic Control-开源

    Clinic Control 是一个 Web 应用程序,它将控制和管理控制患者、医生的日程安排、病史、库存、现金控制以及许多其他功能,可帮助您在小型医疗中心控制一切。

    英文原版-Lateral Skull Base Surgery The House Clinic Atlas 1st Edition

    --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 ...

    Clinic-Management-System

    标题中的"Clinic-Management-System"表明这是一个用于诊所日常运营和管理的软件系统,而描述则揭示了这个系统是用C语言编写的,并且它利用了链接列表这种数据结构来存储和处理与诊所管理相关的数据。这个项目是作为...

    Oracle 中XML处理函数介绍

    在Oracle数据库中,XML处理是处理结构化数据的重要部分,特别是在需要存储和操作XML格式的数据时。以下是对Oracle中XML处理函数的详细说明: 1. **EXTRACT (XMLType_instance, XPath_string)**:此函数通过XPath...

    clinic99.com

    SCSS 是一种预处理器语言,它扩展了 CSS,增加了变量、嵌套规则、混合、函数等特性,使得 CSS 的编写更加模块化和易于维护。 首先,让我们深入了解 SCSS(Sass CSS): 1. **SCSS语法**:SCSS 是 Sass 的最新语法...

    Aspnet-WA-Will-Clinic.zip

    Aspnet-WA-Will-Clinic.zip,华盛顿兽医诊所将为符合条件的美军退伍军人提供免费的遗产规划文件。,asp.net是一个开源的web框架,用于使用.net构建现代web应用和服务。asp.net创建基于html5、css和javascript的网站,...

    pet-clinic:Spring Framework宠物诊所

    宠物诊所项目是一个基于Spring Framework构建的应用程序,它模拟了一个简单的宠物护理中心的管理流程。这个项目可以帮助我们深入了解Spring Framework在实际开发中的应用,以及如何利用Java进行后端编程。在这个项目...

    db2 v10 performance clinic workbook

    这里包括创建定制化的缓冲池和表空间,以及为LOB/LONG数据创建专用的表空间。 总体而言,DB2 v10性能调优和监控手册覆盖了DB2数据库性能优化的多个关键环节,包括但不限于数据库配置、监控工具的使用、查询调优、...

    ts-clinic网站

    最小的错误远程主题启动器单击上方的“按钮,以最快的方式入门“。 包含基本配置,以使您拥有一个网站: 样本帖子。 示例顶部导航。 带有社交链接的示例作者侧边栏。 样本页脚链接。 分页首页。...

    bug-clinic:一个nodeschool.io风格的讲习班,用于学习如何调试Node.js应用程序

    错误诊所一个nodeschool.io风格的讲习班,用于学习如何调试Node.js应用程序 请注意,这仅完成了2/3,但是您可能仍会学到一些东西$ sudo npm --global install bug-clinic$ bug-clinic贡献者执照bug-clinic版权所有...

    SOUTH AUSTIN ORTHOPAEDIC CLINIC, PA.doc

    文档"SOUTH AUSTIN ORTHOPAEDIC CLINIC, PA.doc"似乎是一份医疗诊所的患者信息表格,主要用于收集患者及紧急联系人的基本信息、保险信息以及与潜在工作相关伤害有关的细节。以下是这份表格中涉及的关键知识点: 1. ...

Global site tag (gtag.js) - Google Analytics