博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java两种常见单例模式介绍
阅读量:3948 次
发布时间:2019-05-24

本文共 2165 字,大约阅读时间需要 7 分钟。

java两种常见单例模式介绍

单例是整个生命周期只能有一个实例,开发中对于有的对象我们只允许他是唯一的就会使用 这种,避免其他的人可以创建实例

使用一些工具方法,用静态类,静态类比单例类更快,因为静态的绑定是在编译期进行的。当你仅仅是提供一些方法时选用静态类,就比如util工具

维护状态信息,或者访问资源,选用单例模式。

1.饿汉式

(single单个单词记错了)

package example.testForJava;public class SignalTest {
//保证其他类中不能创建他的实例 private SignalTest() {
} //在类初始化的时候就进行创建实例 private static SignalTest signalTest = new SignalTest(); public static SignalTest getInstance() {
return signalTest; } private String name; private String password; public String getName() {
return name; } public void setName(String name) {
this.name = name; } public String getPassword() {
return password; } public void setPassword(String password) {
this.password = password; }}
package example.testForJava;public class SignalTest2 {
// SignalTest signalTest=new SignalTest();public static void main(String[] args) {
SignalTest instance = SignalTest.getInstance(); instance.setName("qweqweq"); instance.setPassword("123123"); SignalTest signalTest=SignalTest.getInstance(); System.out.println( signalTest.getName());}}//从结果可以知道signalTest和instance实际上都是指向同一个对象

2.懒汉式

多线程线程安全

package example.testForJava;public class SingleLazy {
private static SingleLazy singlelazy; private SingleLazy() {
} //bu使用synchronized修饰就会导致产生的对象不是同一个 public static synchronized SingleLazy getInstance() {
try {
if (null == singlelazy) {
Thread.sleep(1000); singlelazy = new SingleLazy(); } } catch (InterruptedException e) {
e.printStackTrace(); } return singlelazy; }}
package example.testForJava;public class singleLazy2 {
public static void main(String[] args) {
Thread[] threads=new Thread[10]; for (int i = 0; i < threads.length; i++) {
threads[i]=new Thread2(); threads[i].start(); } }}class Thread2 extends Thread{
@Override public void run() {
System.out.println(SingleLazy.getInstance().hashCode()); }}//经测试可以知道都是一个对象(hashcode相同)

转载地址:http://tqrwi.baihongyu.com/

你可能感兴趣的文章
Android的Gradle技巧 1.4从Android Studio执行Gradle构建
查看>>
Android的Gradle技巧 1.5添加Java库依赖关系
查看>>
Android的Gradle技巧 1.6使用Android Studio添加库依赖关系
查看>>
Android的Gradle技巧 1.7配置存储库
查看>>
android Collections 排序,
查看>>
Android的Gradle技巧 2.1设置项目属性
查看>>
Android的Gradle技巧 2.2将应用程序从Eclipse ADT移植到Android Studio
查看>>
Android的Gradle技巧 2.3从Eclipse移植应用程序ADT使用Eclipse
查看>>
昂山素季 Aung San Suu Kyi
查看>>
AI 人工智能第一课 从贝叶斯定理开始
查看>>
朴素贝叶斯python实现
查看>>
Logistic回归原理及公式推导
查看>>
并发性与并行性 并发性与并行性
查看>>
惰性求值,可组合和模块化的JavaScript
查看>>
How to Extend Django User Model 如何扩展Django用户模型
查看>>
两个行业的故事:编程语言与富裕国家和发展中国家之间的差异
查看>>
15个用于管理MySQL服务器mysqladmin命令
查看>>
服务器端I / O性能:Node,PHP,Java与Go
查看>>
多行文本编辑时,同一行编辑不同类型的字符时自动换行的问题
查看>>
如何使开机动画只播一次
查看>>