本帖最后由 相濡、彼岸 于 2015-7-28 23:01 编辑
饿汉式:线程安全,三步:一、创建一个静态并且私有的本类对象, 二、将构造函数私有化, 三、对外提供一个方法,可以访问到本类中创建的对象。无论有多少类要使用这个类中的对象,对象是唯一的,就是之前创建的本类对象,是固定的。
懒汉式:是线程不安全的, 一、 因为 我们是在类中创建了一个静态并私有的类的成员变量,用来接收我们创建的对象, 二、将构造函数私有化
三、我们对外提供的方法中创建本类对象,有之前创建的变量接收。 这样就存在线程安全问题了,加入我多个线程同时进入到了这个方法中,每个线程都会创建一个对象,达不到对象唯一的目的。 如果用懒汉式,就需要使用到同步函数 或者是同步代码块 ,建议使用同步代码块, 因为使用同步函数每次都需要判断锁,影响了效率。在方法中增加同步代码块,当第一条线程进来的时候,给同步代码块上锁,并判断变量为null, 但是还没有创建对象就等待了,也就是执行权被别的线程抢走了,那么比如说第二条线程进来了,变量为null,再判断锁,发现锁上了,那么第二条线程进不到同步代码块里面,那么此时第一条线程抢到了执行权,继续往下走,创建本类对象,用变量接收。当第三条线程进入方法的时候,判断变量不为null了,就不会再去判断锁了。达到了线程的安全,并且也保证了对象的唯一。
好长时间没有看基础了,个人理解,老师的视频里面都有讲到,自己多练习,多思考。
|