首页 > 其他 > 详细

synchroized String object 时使用guava的interner代替String.intern()

时间:2014-08-01 19:15:22      阅读:698      评论:0      收藏:0      [点我收藏+]

synchroized代码块, 直接使用String作为lock的时候,不会起作用

此时可已使用String.intern()作为代替,

但String.intern()的缺陷是 如果字符串特别多,导致放入字符串池的String不可控,有可能导致OOM错误或者过多的Full GC

具体参考这里

http://stackoverflow.com/questions/10578984/what-is-string-interning/10579062#10579062

因此使用guava的Interner作为代替

private Interner<String> interner = Interners.<String>newWeakInterner();

public  void test(String str){
    synchronized(interner.intern(str)){
             ...
    };      
}

好处是Note that unlike String.intern(), using this interner does not consume memory in the permanent generation.

synchroized String object 时使用guava的interner代替String.intern(),布布扣,bubuko.com

synchroized String object 时使用guava的interner代替String.intern()

原文:http://www.cnblogs.com/xmjzblog/p/3885512.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!