zoukankan      html  css  js  c++  java
  • jvm本身的多线程机制

    1 多线程环境下的构造函数调用

    构造函数本身并没有隐式的同步,因为各个线程构建的是自己的对象,它们之间是不存在竞争关系的。

    2 class loader在load class时被了sychronized

    java.lang.ClassLoader->loadClass(String name)->sychronized Class<?> loadClass(String name, boolean resolve).

    在这个被sychronized的loadClass中,会去检查是否该类已经加载了,如果已经加载了,就直接去resolve这个已经加载的类。关键是,返回这个Class对象前,都是在synchronized函数里面的,所以对static变量的初始化是已经被synchronized,是线程安全的。

    package Singleton;

    public class EagerSingleton {
    //饿汉单例模式
    //在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快

    private static EagerSingleton instance = new EagerSingleton();//静态私有成员,已初始化

    private EagerSingleton()
    {
    //私有构造函数
    }

    public static EagerSingleton getInstance() //静态,不用同步(类加载时已初始化,不会有多线程的问题)
    {
    return instance;
    }
    }
    3 synchronized method
    一个synchronized函数,假如一个线程进了,那么其它线程将会被suspend。
  • 相关阅读:
    电话聊天狂人
    PAT 1080. MOOC期终成绩
    PAT 1079. 延迟的回文数
    [转载]matlab 中序列求极值的方法
    [转载][转]Matlab-寻找峰值函数
    [转载]Kirchhoff Migration Impulse Response
    Envelope Extraction Using the Analytic Signal
    [转载]地震动的挑选
    C笔记
    Git常用有用命令
  • 原文地址:https://www.cnblogs.com/hustdc/p/6433654.html
Copyright © 2011-2022 走看看