面试题高性能的单例

问题:.编写一个单例(要求1.必须在方法中实现单例,2高性能)

1.


public class OneClass {
 
 private static OneClass oneClass = null;
 public static synchronized OneClass getInstance(){
  while(oneClass == null){
   oneClass = new OneClass();    
  }
  return oneClass;
 }
 
 
 public static void main(String[] args) {
  OneClass oneClass = OneClass.getInstance();
 }
}

这样编写是可以生产单例,但是访问单例时效率不高,瓶颈在锁的位置。

对上面程序进行改写如下:

public class OneTest {
 private static ThreadLocal<OneTest> local = new ThreadLocal<OneTest>();
 private static OneTest oneClass = null;
 private static Lock lock = new ReentrantLock();
 public static  OneTest getInstance(){
  oneClass = local.get();
  if(oneClass == null){
       oneClass= new OneTest(); 
       local.set(oneClass);
    
  }
  return oneClass;
 }

}

这样编写性能就会比较高了。


 

猜你喜欢

转载自gjp014.iteye.com/blog/2084849