其实单例模式java实现的问题并不复杂,但是又很多的朋友都不太了解Java常用的五种设计模式,因此呢,今天小编就来为大家分享单例模式java实现的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
Java单例模式简单吗
Java单例说起来简单,很多初学者也学起来也认为很简单,但是深入思考一下,就会发现没那么简单。
单例要考虑到多线程并发访问的问题,就会变得复杂起来。如何保证线程安全?比较常见的方法就是使用DCL(DoubleCheckLock)单例。实现代码如下:
这里还要特别注意,INSTANCE前还需要加上volatile修饰符。为什么要加这个修饰符呢?这里就涉及到CPU底层的一些知识了。简单来说,CPU底层执行指令的时候会对不同的指令进行重排序,我们Java代码里的一行代码,在CPU底层可能是多条指令,如果发生了重排序,单例对象实例化过程中可能会把半初始化状态的对象返回,那么当前线程获取到的实例与其他线程获取的完全初始化的对象就不一样了。volatile修饰符,可以防止CPU底层对这一行代码的相关指令进行重排序,直到对象完全初始化,保证多个线程访问单例返回的是同一个对象。
所以,看似简单的问题,其实也不简单。
java,单例对象的方法可以被多个线程同时调用吗
同时是不可能的,[单例]这个词已经限定了,同一时刻只能有一个线程在访问!其他一定在等待前者访问结束!
很简单,假如你说的成立,如果A正在修改,B正在访问,数据一定错误!
单列是一种设计模式,在你生成这个对象时候就已经限定了,同一时刻,只允许一条线程访问!
如果你没达到这个限定,那就不叫单列;
也就是说在你写单列的时候,就已经考虑到线程安全问题!
文章到此结束,如果本次分享的单例模式java实现和Java常用的五种设计模式的问题解决了您的问题,那么我们由衷的感到高兴!