- 立即加载就是使用类的时候已经将对象创建完毕,常见的实现办法就是直接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;
}
}
- 延迟加载就是在调用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;
}
}
- 此方法加入同步synchronized关键字得到相同的实例对象,,但此方法的运行效率非常低下,是同步运行的,下一个线程想要取得对象,则必须等上一个线程释放锁之后,才可以继续执行。
- 使用DCL双检查机制来实现多线程环境中的延迟加载单例设计模式。
- NEW状态是线程实例化后还从未执行start()方法时的状态,而runnable状态是线程进入运行的状态,terminated是线程被销毁时的状态。
- 执行sleep()方法后线程的状态是timed_waiting。BLOCKED状态出现在某一个线程在等待锁的时候。
- 执行wait()方法后线程的状态枚举值就是waiting。
- 线程组的作用是,可以批量的管理线程或者线程对象,有效地对线程活线程组对象进行组织。
- 所谓的1级关联就是父对象中有子对象,但不创建子孙对象。
- 类SimpleDateFormat主要负责日期的转换与格式化,但在多线程环境中,使用此类容易造成数据转换及处理的不准确,因为SimpleDateFormat类并不是线程安全的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。