谨慎设计一个单例类

   如果设计成一个单例类,虽然不存在对象频繁回收,可要长期占用资源。而且意味着外面对多线程,到了这里需要排队进入。什么时间设计成单例呢?设计一个单例就意味着, 我们存在资源竞争,必须的,二,我们要频繁创建对象,销毁对象(一般最多可见Utility)。资源竞争我们用在数据库操作,文件操作,队列,静态变量。但像上面说的,设计一个单例,问题很多,因为我们设计的想法,就是通用性。处了上面的情况,非必须最好不设计单例模式(效率问题),最佳的方式,让调用者根据使用情况单例化被调用者。好处是,一,延迟加载了使用时间,二、可以被调用者的销毁而回收。在设计单例时,我们要分析效率,我们经常设计的单例方式

 

public class VFactory{private static VFactory instance = null;private static object threadSafeLocker = new object();public void Read(){}public void Write(){}public static VFactory Instance{get{if (null == instance){lock (threadSafeLocker){if (null == instance){instance = new VFactory;}}}return instance;}}}


很典型的单例,可问题很多,效率不高,所有线程在进入的时候,都需要排队,如果一个线程是要执行Read 而另一个要执行Write ,实际的情况我们大部门时间(一个共享变量或队例,不会改变)在浪费时间,read的时机我们不需要加锁,而仅仅Write时,所以设计一个静态方法,不是更好吗?而且如果是单例,那你必须小心操作它内部的变量不仅是Static 变量,private、 protected 也必须小心,如果不加锁,也是会出错误的。最好办法,让它的调用者控制,调用者如果是N个线程,那这N个线程都会指向一个单例地址Copy ,而在调用者内,都存在N份单例的内部变量。

    总结:非必须不设计单例模式,(.net 回收很快的) ,读写同时存在时,设计静态方法。让调者考虑实例方式。

    

转载于:https://www.cnblogs.com/shouhongxiao/p/3530091.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity中脚本编辑器UnIDE

引言 unity默认脚本编辑器是MonoDevelop,随着unity4.3面世,MonoDevelop (4.0.1)版本也随之而来,更新为界面更改和bug自动修复功能等,具体还未使用。 点击unity的Edit下的属性(preference),可以更改默认脚本编辑器&…

apk,task,进程区别

2019独角兽企业重金招聘Python工程师标准>>> apk,task,进程区别 apk一般占一个dalvik,一个进程,一个task。通过设置也可以多个进程,占多个task。 task是一个activity的栈,其中"可能"含有来自…

Java 线程 —— 基础篇

一、操作系统中线程和进程的概念 现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe…

【Java并发性和多线程】线程安全及不可变性

2019独角兽企业重金招聘Python工程师标准>>> 本文为转载学习 原文链接:http://tutorials.jenkov.com/java-concurrency/thread-safety-and-immutability.html 译文链接:http://ifeve.com/thread-safety-and-immutability/ 当多个线程同时访问…

Java 高级—— IO 基础

一、File 类 先看一下File 类的定义 [java] view plaincopy public class File extends Object implements Serizliable Comparable<File> 从定义看&#xff0c;File类是Object的直接子类&#xff0c;同时它继承了Comparable接口可以进行数组的排序。 File类的操作包括…

安装 SharePoint 2013 Foundation

一、Foundation版本的区别Foundation版本的区别见附件&#xff08;英文&#xff09;。官网下载地址 http://www.microsoft.com/zh-cn/download/details.aspx?id35488二、安装必备软件三、独立安装模式1. 启动安装向导2. 接受软件许可条款3. 选择服务器类型和数据位置4. 结束安…

Java 异常处理机制

异常处理是程序设计中一个非常重要的方面&#xff0c;也是程序设计的一大难点&#xff0c;从C开始&#xff0c;你也许已经知道如何用if...else...来控制异常了&#xff0c;也许是自发的&#xff0c;然而这种控制异常痛苦&#xff0c;同一个异常或者错误如果多个地方出现&#x…

架构师未来性的基础:简单性

作者&#xff1a;高焕堂&#xff0c;misoo.twqq.com 首页&#xff1a;Backee e架构师未来性的基础&#xff1a;简单性 Apple公司创始人乔布斯(Steve Jobs)曾说到&#xff1a;“简单比复杂更难&#xff0c;你必须努力让你的想法变得清晰…

Android 基础—— 对Context的理解与使用技巧

一、Context 基础概念 1、什么是Context 1) Context是一个抽象类&#xff0c;其通用实现在ContextImpl类中。 2) Context&#xff1a;是一个访问application环境全局信息的接口&#xff0c;通过它可以访问application的资源和相关的类&#xff0c;其主要功能如下&a…

函数可微的一个充分条件

设函数 $f:\bbR^n\to \bbR$ 在 $\bbR^n\bs \sed{0}$ 可微, 在 $0$ 连续, 且 $$\bex\lim_{\bbx\to0}\frac{\p f(\bbx)}{\p x_i}0,\ i1,2,\cdots,n. \eex$$ 证明 $f$ 在 $0$ 可微. 证明: 由 $$\beex \bea |f(\bbx)-f(0)| &\leq |f(x_1,x_2,\cdots,x_n)-f(0,x_2,\cdots,x_n)|…

Android 四大组件 —— 广播(广播机制解析)

在网络通信中&#xff0c;一个IP网络范围中最大的IP 地址是被保留作为广播地址来使用的。比如某个网络的IP 范围是192.168.0.XXX&#xff0c;子网掩码是255.255.255.0&#xff0c;那么这个网络的广播地址就是192.168.0.255。广播数据包会被发送到同一网络上的所有端口&#xff…

linux高可用

来自&#xff1a;http://blog.csdn.net/deansrk/article/details/6780639Linux高可用集群&#xff08;一&#xff09;&#xff1a;Corosync/Openais Pacemaker 实现高可用集群来自&#xff1a;http://blog.csdn.net/deansrk/article/details/6780650Linux高可用集群&#xff0…

Android 基础 —— 活动的生存周期

一、返回栈 Android 中的活动是可以层叠的。我们每启动一个新的活动&#xff0c;就会覆盖在原活动之上&#xff0c;然后点击Back 键会销毁最上面的活动&#xff0c;下面的一个活动就会重新显示出来。 其实Android 是使用任务&#xff08;Task&#xff09;来管理活动的&#xff…

产品经理做市场调研和数据分析的方法

产品经理&#xff0c;你对用户的需求了解多少呢&#xff1f;你知道用户想要什么样的产品吗&#xff1f;你想知道用户将会如何看待你的产品吗&#xff1f;你想知道你设计的产品在用户中的口碑如何吗&#xff1f; 是 的。每一个产品经理都希望在产品开始立项设计前&#xff0c;得…

Android 基础 —— 活动的启动模式

活动的启动模式来说应该是个全新的概念&#xff0c;在实际项目中我们应该根据特定的需求为每个活动指定恰当的启动模式。启动模式一共有四种&#xff0c;分别是standard、singleTop、singleTask 和singleInstance &#xff0c; 可以在AndroidManifest.xml 中通过给<activity…

一个行外人看中国的电子竞技

本身爱打游戏&#xff0c;也经常关注一下主流页媒的公告&#xff0c;想以一个行外人谈一下中国的电子竞技。先解释一个概念&#xff0c;流入行业的钱就是一个资本蓄水池&#xff0c;在这个行业的各个环节都要从中分得一杯水来维持他发展&#xff0c;这就是资本注入的全灌溉。&a…

ExpandableListView 箭头靠右

ExpandableListView 默认标示箭头是在左边的&#xff0c;当左边有图片时&#xff0c;不是太好看&#xff0c;想把它放在右边&#xff0c;这么简单的事可我折腾死了&#xff0c;还好给我找到了。 参照了以下链接&#xff1a; expandableListview的默认箭头箭头怎样移到右边 提供…

Android 四大组件 —— 服务

一、服务是什么 服务&#xff08;Service&#xff09;是Android 中实现程序后台运行的解决方案&#xff0c;它非常适合用于去执行那些不需要和用户交互而且还要求长期运行的任务。服务的运行不依赖于任何用户界面&#xff0c;即使当程序被切换到后台&#xff0c;或者用户打开了…

Highlighting System

Highlighting System 法线贴图漫反射着色器 Unity论坛&#xff1a;http://forum.unity3d.com/threads/143043-Highlighting-System-Released 需要条件 Requires Unity 3.5.6 or higher.This package requires Unity Pro, as it uses post-processing!Now supports Unity iOS Pr…

Android 基础 —— 模拟实现拨打电话功能

前面已经学习活动的显示跳转及隐式跳转&#xff0c;也学习 TextView 及 Button 两个控件的使用&#xff0c;下面我们来学习 EditText的使用&#xff1a; EditText 是程序用于和用户进行交互的另一个重要控件&#xff0c;它允许用户在控件里输入和编辑内容&#xff0c;并可以在程…