A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王运科 中级黑马   /  2012-4-23 17:06  /  1673 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

N个客户机掉一个单例会不会使系统性能下降。java单例是多线程。麻烦大家讲解一下

4 个回复

倒序浏览
不会,当你第一次调用单例的方法得到一个实例的时候,会创建这个类的实例,在内存中会为这个单例开辟一块空间,以后再调用,得到的只是这个类的引用,并不会再去创建它的实例!所以不会影响性能!
回复 使用道具 举报
本帖最后由 邱俊杰 于 2012-4-23 18:00 编辑

单例有懒汉和饿汉、就顺便复习一下代码吧,
  1. 饿汉士:不过通常考的是懒汉士
  2. *class Single
  3. *{
  4. *                private static final Single s=new Single();
  5. *                private Single (){}
  6. *                public static Single gerInstance()
  7. *                {
  8. *                        return s;
  9. *                }
复制代码
这是饿汗士多线程执行的代码。
  1. // 懒汉士
  2. class Single
  3. {
  4.         private static Single s=null;
  5.         private Single(){}
  6.         public static Single getInstance()//如果多线程进入应该加锁、不然会创建多个对象,
  7.         {
  8.                 if(s==null)这里做了一次判断。所以楼主注意了,不会消耗资源性能
  9.                 {
  10.                         synchronized(Single.class)
  11.                         {
  12.                                 if(s==null)   
  13.                                 {
  14.                                         s=new Single();
  15.                                 }
  16.                         }
  17.                 }
  18.                 return s;
  19.         }
  20. }
复制代码
回复 使用道具 举报
饿汉式没有问题,懒汉式存在多线程并发访问的安全问题。所以需要同步线程安全问题,但是同步会降低效率。所以可以通过双重if判断的形式,解决效率问题,降低对锁的判断次数。所以在代码体现上较多。所以开发时,单例建议使用饿汉式
回复 使用道具 举报
单例是只会创建一个类的实例的,调用的是实例的引用。所以不会
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马