使用guava进行对字符串的加锁】的更多相关文章

java的synchronized关键字是堆某对象加锁,但是我们当需要对某个字符串加锁怎么办 比如对同一个订单只能有一个操作,但是对其他订单的操作不影响 使用 guava包下的 Interner 类 private static final Interner<String> pool = Interners.newWeakInterner(); synchronized ( pool.intern("Order_"+orderId)){ //TODO:something }…
Joiner Guava 是Google 对Java的内置类型进行增强和扩展的工具. Joiner.on(", ").join(Iterator<> iter) Joiner.on(" - ").join(Object[] objects)Joiner.on(" / ").join(first, second, rest..) Joiner.on(" : ").skipNulls().join() 1. on()方…
guava字符串工具 在java开发过程中对字符串的处理是非常频繁的,google的guava工具对字符串的一些处理进行优化,使我们开发过程中让自己的代码看去更加美观,清爽. 一.Joiner 根据给定的分隔符把字符串连接到一起.MapJoiner 执行相同的操作,但是针对 Map 的 key 和 value. 分析源码可知:该类构造方法被private修身,无法直接通过new实现,通过调用on传如分隔符来得到实例. 案例 public class JoinerTest { public sta…
import static org.junit.Assert.*; import java.util.List; import java.util.Map; import org.junit.Test; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.Lists; import com.google.common.colle…
测试目的描述 Synchronized关键字锁定String字符串可能会带来严重的后果, 尽量不要使用 synchronized(String a) 因为JVM中,因为字符串常量池具有缓冲功能! 接下来, 测试使用""的形式引用字符串和使用new的String()来声明一个字符串, 再使用Synchronized关键字同步该字符串,看两个线程共同调用含有这个Synchronized锁定的字符串的代码块会发生什么同步问题. 测试1: 默认使用""的形式引用字符串 来作…
字符串处理工具Guava使用总结 在java开发过程中对字符串的处理是非常频繁的,google的guava工具对字符串的一些处理进行优化,使我们开发过程中让自己的代码看去更加美观,清爽. 1:maven依赖: <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>18.0</version> <…
最近在给客户准备一个Guava的分享,所以会陆续的更新关于Guava更多的细节分享.本文将记录Guava中得字符串处理Joiner(连接)和Splitter(分割)处理. Joiner 首先我们来看看下面我们经常遇见的一个案例: 题目: 对于一个如下定义List List<String> list = new ArrayList<String>("1", "2", null, “3”); 按照’,’分割,并过滤掉null. 如果不用第三方库,…
Google Guava是什么东西?首先要追溯到2007年的“Google Collections Library”项目,它提供对Java 集合操作的工具类.后来Guava被进化为Java程序员开发必备的工具.Guava可以对字符串,集合,并发,I/O,反射进行操作. 在软件开发过程中,我们自认为可以什么都能做,我们本能的去写自己的类库来处理一些日常的问题.当然,我们认为自己写的代码是坚不可摧的,并且是经过单元测试的.实际上,我们没有我们认为的那么聪明,换句话说,它不在于你有多聪明,而是在于编写…
最近在给客户准备一个Guava的分享,所以会陆续的更新关于Guava更多的细节分享.本文将记录Guava中得字符串处理Joiner(连接)和Splitter(分割)处理. Joiner 首先我们来看看下面我们经常遇见的一个案例: 题目: 对于一个如下定义List List<String> list = new ArrayList<String>("1", "2", null, “3”); 按照’,’分割,并过滤掉null. 如果不用第三方库,…
  使用Joiner类 将任意字符串通过分隔符进行连接到一起是大多程序员经常做的事情.他们经常使用array,list,iterable并且循环变量将每一个临时变量添加到StringBuilder当中去,并且中间添加分隔符.这些笨重的处理方式如下: public String buildString(List<String> stringList, String delimiter){ StringBuilder builder = new StringBuilder(); for (Stri…
基础功能 google guava中定义的String操作 在google guava中为字符串操作提供了很大的便利,有老牌的判断字符串是否为空字符串或者为null,用指定字符填充字符串,以及拆分合并字符串,字符串匹配的判断等等. 1. 使用com.google.common.base.Strings类的isNullOrEmpty(input)方法判断字符串是否为空 1 //Strings.isNullOrEmpty(input) demo 2 String input = ""; 3…
转自:http://www.cnblogs.com/renchunxiao/p/3661918.html?utm_source=tuicool 使用Joiner类 将任意字符串通过分隔符进行连接到一起是大多程序员经常做的事情.他们经常使用array,list,iterable并且循环变量将每一个临时变量添加到StringBuilder当中去,并且中间添加分隔符.这些笨重的处理方式如下: public String buildString(List<String> stringList, Str…
Guava作为Java编程的助手,可以提升开发效率,对Guava设计思想的学习则极大的有益于今后的编程之路.故在此对<Getting Started with Google Guava>一书进行翻译并实战,未予审校,错误之处请大家不吝赐教. 全文目录如下: 1.    入门    2 1.1. Guava简介    2 1.2. Guava使用实例    2 1.3. 本书是关于什么的?    3 1.4. Guava安装    3 1.5. 通过Maven或者Gradle管理Guava   …
上一篇笔记的内容大部分没有实际动手操作,因此决定完成这个完整的练习并记录下来. 另注,idea环境下有jclasslib插件用于更好的查看类似于javap结果的内容. 源代码如下: package com.learn.jvm; /** * @Description * @date 2019/09/05 16:31 */ public class Test { String str = "Welcome"; private int x = 5; public static Integer…
在前面的文章<双刃剑-理解多线程带来的安全问题>中,我们提到了多线程情况下存在的线程安全问题.本文将以这个问题为背景,介绍如何通过使用synchronized关键字解这一问题.当然,在青铜阶段,我们仍不会过多地描述其背后的原理,重点还是先体验并理解它的用法. 一.从场景中体验synchronized 是谁击败了主宰 在峡谷中,击败主宰可以获得高额的经济收益.因此,在条件允许的情况下,大家都会争相击败主宰.于是,哪吒和敌方的兰陵王开始争夺主宰.按规矩,谁是击败主宰的最后一击,谁便是胜利的一方.…
业务场景需要锁住指定的字符串下的代码,防止并发创建多个订单 这里我们使用 ConcurrentDictionary 首先初始化一个字典 private static readonly ConcurrentDictionary<string, string> _dictLock = new ConcurrentDictionary<string, string>(); 然后使用定义一个要锁代码的的key,这里为保证每个订单唯一,使用微信的订单号作为key 对同一微信支付订单的回调进行…
一,Strings类 public void testStrings(){ Strings.isNullOrEmpty("");//返回true Strings.nullToEmpty(null);//"" Strings.nullToEmpty("chen");//返回"chen" Strings.emptyToNull("");//返回null Strings.emptyToNull("che…
前言 Java 里字符串表示字符的不可变序列,创建后就不能更改.在我们日常的工作中,字符串的使用非常频繁,熟练的对其操作可以极大的提升我们的工作效率,今天要介绍的主角是 Google 开源的一个核心 Java 库 Guava,它提供了集合类型.不可变的集合.并发.I / O.缓存.字符串等许多实用功能.在本文中,我们将学习使用 Guava 中的 Strings 和 Splitter 字符串操作工具类. 如何使用 Google Guava 会同步到 Maven Central 中,所以,如果你是…
guava字符串工具 一.Joiner 根据指定的分隔符把字符串连接在一起,MapJoiner执行相同的操作,但是针对Map的key和value 分析源码可知:该类构造方法被private修饰,无法直接通过new 实现,通过调用on传入分隔符来得到实现 案例 public class JoinerTest { public static void main(String args[]){ //1.将list字符串集合,以,形式转为字符串 List<String> list =new Array…
一.连接器[Joiner] 二.拆分器[Splitter] 三.字符匹配器[CharMatcher] 四.字符集[Charsets] Charsets:针对所有Java平台都要保证支持的六种字符集提供了常量引用.尝试使用这些常量,而不是通过名称获取字符集实例. try { byte[] bytes = test.getBytes("UTf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } 修改成…
一.Joiner 拼接字符串 1.join 拼接集合中的元素 System.out.println(Joiner.on(";").join(Ints.asList(1,2,3))); //1;2;3 2.skipNullls 过滤null Joiner joiner=Joiner.on(";").skipNulls(); System.out.println(joiner.join("1",null,"22")); //1;2…
public class StringsTest { public static void main(String args[]){ //1.补右全(Strings.padEnd方法) String a="12345"; String b=Strings.padEnd(a, 10, 'x'); System.out.println(b); //输出:12345xxxxx //2.补左全(Strings.padStart) String c=Strings.padStart(a, 10,…
public class SplitterTest { public static void main(String args[]){ //1.拆分字符串为List集合 String str="小小,妈妈,爸爸,爷爷,奶奶"; Splitter splitter =Splitter.on(","); List<String> list=splitter.splitToList(str); System.out.println(list); //输出:[小…
public class JoinerTest { public static void main(String args[]){ //1.将list字符串集合,以,形式转为字符串 List<String> list =new ArrayList<String>(); list.add("xx"); list.add("zz"); list.add("dd"); //Joiner.on(",")获得Jo…
Joiner 连接 比如,有这样一个集合[1,2,3,4,5,7,null],想把这个集合转换成以#分割的字符串,并过滤掉集合中的空元素 List<Integer> eleList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, null); String joinStr = Joiner.on("#") //分隔符 .skipNulls() //过滤null元素 .join(eleList);//要分割的集合 System.out.println…
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3861502.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验. Joiner Joiner joiner = Joiner.on("; ").skipNulls(); return joiner.join("Harry", null, "Ron", "Hermione"); 也可以.joi…
背景 对于高频访问但是低频更新的数据我们一般会做缓存,尤其是在并发量比较高的业务里,原始的手段我们可以使用HashMap或者ConcurrentHashMap来存储. 这样没什么毛病,但是会面临一个问题,对于缓存中的数据只有当我们显示的调用remove方法,才会移除某个元素,即便是高频的数据,也会有访问命中率的高低之分,内存总是有限的,我们不可能无限地去增加Map中的数据. 我希望的比较完美的场景时.对于一个业务,我只想分配给你2k的内存,我们假设map中一条数据(键值对)是1B,那么最多它能存…
  guava是google的一个开源java框架,其github地址是 https://github.com/google/guava.guava工程包含了若干被Google的 Java项目广泛依赖的核心库,例如:集合 [collections] .缓存 [caching] .原生类型支持 [primitives support] .并发库 [concurrency libraries] .通用注解 [common annotations] .字符串处理 [string processing]…
官方:http://ifeve.com/google-guava-cachesexplained/ 理解:https://segmentfault.com/a/1190000007300118 项目中用到cache的例子: public class TokenCache { //打印日志 private static Logger logger = LoggerFactory.getLogger(TokenCache.class); public static final String TOKE…
1.ehcahce 什么时候用比较好:2.问题:当有个消息的key不在guava里面的话,如果大量的消息过来,会同时请求数据库吗?还是只有一个请求数据库,其他的等待第一个把数据从DB加载到Guava中 回答:是的,其他的都会等待load,直到数据加载完毕:2.recency queue 干嘛用的: 目前没看出来,但是应该是为了LRU队列也就是快速删除算法,因为recency queue的队列,如果读的话,会往recency queue和 access queue中写入数据,如果写的话,首先要清空…