测试“单例模式”的作用域是线程还是进程
来源:互联网 发布:爬虫数据采集解决方案 编辑:程序博客网 时间:2024/05/23 11:55
提出问题
在学习的过程中,在朋友问我的一个问题中,我突然想到我们经常说的单例模式,也就是通常说的只能存在这样一个对象的问题,我突然想,它的这个对象是在一个线程中只能有一份,还是在这个进程中只能够有一份呢?
解决的思路
最好的解决办法就是在一个程序中,创建两个线程,获取同一个单例对象,然后通过比对看着两个对象是不是同样的一个对象即可。
实际结果
创建单例类
首先简单创建一个单例的类,用于后面对单例的测试:
package cn.beixiansheng.single;public class SingleA { private static SingleA single; private SingleA() { } public static SingleA getInstance() { if (single == null) { single = new SingleA(); } return single; } public void test() { }}
下面是进行测试验证的方法
package cn.beixiansheng.single;public class Test { public static void main(String[] args) { SingleA singleA = SingleA.getInstance(); System.out.println(singleA); new Thread() { public void run() { SingleA singleB = SingleA.getInstance(); System.out.println(singleB); }; }.start(); }}
在上面的方法里面,有两个线程,在两个线程里面都通过单例类的静态方法获取这个单例的对象。
分别使用toString方法来输出各个线程中使用的对象的哈希码,在很大程度上就能够通过看它是否相同判断是不是一个对象了
我的测试结果显示
我的测试结果展示如下:
cn.beixiansheng.single.SingleA@15db9742cn.beixiansheng.single.SingleA@15db9742
可以看到这两个对象的哈希码是完全一样的(可能每个人的值并不一样,我对java生成哈希码原理不了解,因此这里不敢确定),也就是基本上它们就是一个对象;如果觉得存在随机性可能,可以多测试几次。
作者联系方式(微信号码):
邮箱:cn_newer@163.com
0 0
- 测试“单例模式”的作用域是线程还是进程
- 单例模式下如何保证是线程安全的
- 理解Node.js的事件循环(代码是异步单线程,内部实现用的还是进程和线程,基于池化的线程实现异步)
- 关于游戏服务器是多线程还是单线程的讨论
- 测试浏览器是否单进程和单线程的代码
- Tomcat是单线程还是多线程
- jvm启动是单线程还是多线程?
- servlet是单线程还是多线程?
- 【JavaScript】JavaScript是多线程还是单线程?
- Redis到底是多线程还是单线程?
- 进程还是线程?是一个问题!
- 进程还是线程?是一个问题!
- 3.spring bean的作用域(是否单例):测试
- 单例模式的测试
- 主要介绍单例模式的一种写法、注意事项、测试、作用。
- servlet的生命周期,servlet是单线程还是多线程(基础问题)
- 测试当前线程是主线程还是其他线程
- 关于linux系统最大进程数和单进程最大线程数的测试
- PHP7扩展开发之字符串处理
- C++学习摘要7
- oss mac 客户端
- easyUI之datagrid控件使用步骤
- Codeforces Round #382 (Div. 2) D. Taxes(分拆素数和)
- 测试“单例模式”的作用域是线程还是进程
- 全排列 递归方法的步骤分析
- 高效管理文件之压缩及解压缩 .bz2 文件
- codeforces 735D Taxes 哥德巴赫猜想
- Pixhawk学习笔记(5)——PX4FLOW光流传感器调试过程记录
- 启动代码 START.s 和u-boot区别&联系
- 2016.11.05【初中部 NOIP提高组 】模拟赛C
- Android Activity启动模式
- java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis