java 反射 单例类_java反射调用单例模式的类保持单例不被破坏

在网上搜了一大堆,都是反射调用单例方法,破坏了类的单例,如何规避。发现都不是我要的结果,首先说下我的需求,服务器的同事提供了一个jar包,里面有个类提供了单例的方法,UDPClient,提供给客户端与服务器进行p2p登录与p2p下载的,要求全局只有一个对象,我试了下,初始化类加载器,loadClass对象,获取其getInstance方法,结果发现在不同的线程里面反射调用登录方法多次后,服务器那边显示有多台客户端与服务器连接了,很明显,一台设备只能对应一个结点,多次登录应该是可以避免的,但是由于我是反射调用提供jar方法,所以,每次登录都创建了一个UDPClient对象,我分析Android类型加载机制,认为导致出现此原因是因为我每次都会取创建一个ClassLoader,每个classLoader取反射加载对象,创建的对象都是不一样的,所以我改成了全局共用一个ClassLoader,然后再反射调用UDPClient.getInstance方法,果然,这回生成的都是同一个对象,bug解决了。

看程序截图,执行p2pLogin方法,会每次反射调用getInstance,创建的对象的hashcode都是同一个值

68222ca49061

68222ca49061

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值