java单例全局变量_利用单例模式解决全局访问问题

本文探讨了在Java中如何利用单例模式解决全局变量的访问问题,以确保对象唯一且线程安全。文章详细介绍了单例模式的实现方式,包括延迟初始化、双重检查锁定和volatile关键字的使用,以及单例模式在多线程环境中的应用和注意事项。
摘要由CSDN通过智能技术生成

在面向对象编程中,我们无时无刻都可能在产生对象,因为我们的代码需要对象,但值得注意的是,我们有时候也有可能是在无谓的产生对象,更加可怕的是,这些累赘的对象会造成难以排查的BUG,尤其是在多线程编程中。

所以,合理的产生对象也是一个学问。

有些对象我们只需要一个,像是线程池,缓冲等,这类对象只能有一个实例,一旦产生多个实例就会出现问题。所以,我们必须找到一种方法来确保我们的代码中只有一个实例。

首先我们想到的第一个解决方法就是声明一个全局变量,然后将对象赋值给该全局变量,但是这意味着我们必须在程序一开始的时候就要创建好该对象,但我们应该是在需要的时候才创建对象,而且如果这个对象本身非常耗费资源的话,这就是一种浪费。

提到创建对象,这里有一点必须要提到:

static BluetoothSocket socket = null;

因为java鼓励人们在声明对象的时候赋予对象初始值以免出现问题,但对象这时候并没有被创建!真正的创建对象应该是通过new和反射机制来产生。

使用全局变量的时候,我们必须确保整个程序中只有一份,因为使用全局变量的目的就是为了共享资源,而共享资源必须到达两个条件:不变和共享。不变,指的是这个资源在整个程序中必须只有一份,而共享是指它的变化必须对共享它的所有对象是可见的,否则,所有对象都有自己的一份,何来共享呢?

因此,我们必须确保一件事:一个类只有一个实例,其他类无法自行产生它的实例。

使用单例模式就能确保这点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值