1. 立即加载就是使用类的时候已经将对象创建完毕,常见的实现办法就是直接new实例化。而立即加载从中文的语境来看,有“着急”、“急迫”的含义,所以也称为“饿汉模式”。
package com.zxf.demo.singleton_0;

public class MyObject {
    
    private static MyObject myobject = new MyObject();
    
    private MyObject(){
        
    }
    
    public static MyObject getInstatance(){
        //立即加载/饿汉模式
        //缺点是不能有其他实例变量
        //因为getInstance()方法没有同步,所以有可能出现非线程安全问题
        return myobject;
    }

}
  1. 延迟加载就是在调用get()方法时实例才被创建,常见的实现办法就是在get()方法中进行new实例化。而延迟加载从中文的语境来看,是“缓慢”、“不急迫”的含义,所以也称为“懒汉模式”。
package com.zxf.demo.singleton_1;

public class MyObject {
    
    private static MyObject myobject;
    
    private MyObject(){
        
    }
    
    public static MyObject getInstatance(){
        
        if(myobject != null){
        }else{
            myobject = new MyObject();
        }
        
        return myobject;
    }

}
  1. 此方法加入同步synchronized关键字得到相同的实例对象,,但此方法的运行效率非常低下,是同步运行的,下一个线程想要取得对象,则必须等上一个线程释放锁之后,才可以继续执行。
  2. 使用DCL双检查机制来实现多线程环境中的延迟加载单例设计模式。
  3. NEW状态是线程实例化后还从未执行start()方法时的状态,而runnable状态是线程进入运行的状态,terminated是线程被销毁时的状态。
  4. 执行sleep()方法后线程的状态是timed_waiting。BLOCKED状态出现在某一个线程在等待锁的时候。
  5. 执行wait()方法后线程的状态枚举值就是waiting。
  6. 线程组的作用是,可以批量的管理线程或者线程对象,有效地对线程活线程组对象进行组织。
  7. 所谓的1级关联就是父对象中有子对象,但不创建子孙对象。
  8. 类SimpleDateFormat主要负责日期的转换与格式化,但在多线程环境中,使用此类容易造成数据转换及处理的不准确,因为SimpleDateFormat类并不是线程安全的。

非典型程序猿
24 声望0 粉丝