
并发
ArnoZhang94
这个作者很懒,什么都没留下…
展开
-
Redis的使用JedisPool、Jedis
Redis的使用JedisPool、JedisPoolConfig、Jedisa)在启动服务时,redis中添加a =>1;b=> 2的数据:@PostConstructpublic void init() { try (Jedis jedis = new Jedis("127.0.0.1", 6379)) { Assert.isTrue("OK".eq...原创 2020-04-01 16:35:54 · 354 阅读 · 0 评论 -
threadpool的oom(out of memory)问题分析
线程池的声明需要手动进行《阿里巴巴 Java 开发手册》中并不推荐使用Java 中的 Executors 类里的快捷的工具方法来快速创建线程池,更应该根据实际的需求等,通过手动 new ThreadPoolExecutor 来创建线程池。否则可能会出现oom问题接下来我们开始使用Executors.newFixedThreadPool,Executors.newCachedThreadPoo...原创 2020-03-30 20:46:19 · 1386 阅读 · 0 评论 -
锁和被保护的对象的分析
静态字段属于类,非静态字段属于类的实例类实例类级别的锁可以保护不可保护实例级别的锁不可保护可以保护我们知道静态字段属于类,类级别的锁才能保护;而非静态字段属于类实例,实例级别的锁就可以保护。...原创 2020-03-25 13:52:47 · 275 阅读 · 0 评论 -
volatile、synchronized的使用
synchronized在JDK1.6后,synchronized与Lock性能上差距很小了(优化了很多,自旋锁,自适应自旋锁、偏向锁,轻量级锁等),synchronized不用手动释放锁,很实用volatilevolatile保证了可见性。被它修改的属性改完后会强制让工作内存失效。去主存拿。(也可以使用java.util.concurrent.atomic下的类)接下来测试以下代码pa...原创 2020-03-24 16:24:42 · 254 阅读 · 0 评论 -
运行在tomcat容器中的ThreadLocal容易产生的问题
运行在tomcat容器中的ThreadLocal容易产生的问题ThreadLocal在tomcat容器中的的生命周期并不等于web request的生命周期,所以(以下讨论的是tomcat容器中使用ThreadLocal),所以ThreadLocal不应保存与请求会影响的相关的信息。ThreadLocal在tomcat容器中的的生命周期并不等于web request的生命周期,所以(以下讨论的是...原创 2020-03-21 17:19:43 · 1355 阅读 · 0 评论 -
computeIfAbsent的使用
Map中computeIfAbsent的使用HashMap.computeIfAbsent如果需要向Map中push一个键值对,需要判断K key在当前map中是否已经存在,不存在则通过后面的 Function<? super K, ? extends V> mappingFunction 来进行value计算,且将结果当作value同key一起push到Map中。Concurr...原创 2020-03-22 15:39:43 · 4226 阅读 · 0 评论 -
使用ConcurrentHashMap的聚合方法作为逻辑条件时也要考虑线程安全
ConcurrentHashMap的优雅使用相对于hashMap,ConcurrentHashMap则具有原子性的读写特性,但是ConcurrentHashMap的聚合方法(例如:size、isEmpty 和 containsValue…)在并发场景下,可能只是一个参考值,不可用于流程的控制。在一个线程pullAll的时候,另一个线程获取size,此时的size就是错误的。要想避免上述问题,则...原创 2020-03-22 09:36:03 · 235 阅读 · 0 评论