`

面试题高性能的单例

    博客分类:
  • java
 
阅读更多

问题:.编写一个单例(要求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;
 }

}

 

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

 

 

 


 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics