高并发
并发容器、多线程操作等
chang_hf
!!!越自律越自由!!!
展开
-
Fork/Join框架实现多任务执行计算
package com.lagou;import java.util.concurrent.ExecutionException;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.ForkJoinTask;import java.util.concurrent.RecursiveTask;/** * 并行计算实现1+2+...+100 */public class CountTask extends原创 2020-11-25 22:11:18 · 283 阅读 · 0 评论 -
乐观锁与悲观锁
CAS多线程环境中,当一条线程去执行某些业务逻辑,但这些业务逻辑操作的数据可能被其他线程共享了,这样就会引发多线程中数据不一致的情况。为了解决这个问题,引入CAS(compare and swap),首先,在线程开始时读取这些线程共享的数据,并将其保存到当前线程的副本中,该线程执行更新操作时,会先去比较当前线程的副本和当前线程共享的值是否一致,如果不一致,那么该数据被其他线程修改过此次更新失败...原创 2018-03-29 18:03:24 · 171 阅读 · 0 评论 -
原子操作类总结
如果多线程同时更新一个变量,可能造成更新后的值不准确。synchronized会保证多线程不会同时更新一个变量。Jdk1.5增加了java.util.concurrent包,这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。 首先了解下CAS算法 原子操作类原理是利用CPU的CAS算法,即比较和替换 public final boolean compareAnd...原创 2018-03-07 23:05:30 · 1371 阅读 · 1 评论 -
ReentrantLock、synchronized、volatile
synchronized把代码块声明为 synchronized,有两个重要后果,通常是指该代码具有 原子性和 可见性。原子性意味着一个线程一次只能执行由一把锁保护的代码,从而防止多个线程在更新共享状态时相互冲突。原子操作表示不可被中断的一个或一系列操作。java 中的每一个对象都可以作为锁。具体表现为一下形式:1、对于普通同步方法,锁是当前实例对象。2、对于静态同步方法,锁是当前类的c...原创 2016-07-22 16:23:32 · 488 阅读 · 0 评论 -
线程池总结
java线程池是为了防止内存溢出,而不是为了加快效率。使用java线程池也应该设置合理的线程数量。为什么要用线程池1、可以减少创建和销毁线程的次数,这样每个工作线程都可以被重复利用,当一个新任务需要运行时,如果线程池中有等待的工作线程可以直接运行,否则进入等待队列。2、可以根据系统的承受能力,调整线程池中工作线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存...原创 2017-06-29 20:08:37 · 303 阅读 · 0 评论 -
LinkedBlockingQueue的api
/** * add方法在添加元素的时候,若超出了度列的长度会直接抛出异常: * put方法,若向队尾添加元素的时候发现队列已经满了会发生阻塞一直等待空间,以加入元素。 * offer方法在添加元素时,如果发现队列已满无法添加的话,会直接返回false。 * */public class Producer implements Runnable { protected Bloc原创 2016-12-26 15:21:59 · 5981 阅读 · 0 评论 -
ThreadLocal的使用
ThreadLocal线程副本,可以理解为一种线程变量,作用域为当前线程,数据存放在ThreadLocal可以一个线程内共享。好处是避免了层与层之间的参数传递,实现松耦合。public class SessionContainer { private static final ThreadLocal<SessionCache> sessionThreadLocal = new ...原创 2016-08-12 09:42:32 · 468 阅读 · 0 评论 -
并发容器介绍
1、HashMap的高效率应用:使用map.entrySet(),而非keySetmap = new HashMap();Iterator iter = map.entrySet().iterator();while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object key = ent...原创 2016-07-14 22:04:14 · 747 阅读 · 0 评论