摘要:一、背景 在P2P项目中,活期通过一张主表t_bid_transfer_control记录用户的总金额,t_bid_order表记录用户取出和存入活期宝的记录。 示例: t_bid_transfer_control表: member_id 100 t_bid_order表: member_id 10
阅读全文
随笔分类 - Java并发
摘要:一、线程池概述 1、什么是线程池?为什么使用线程池? 线程池的优势: 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。 第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资
阅读全文
摘要:一、jdk8的实现原理 JDK8的实现已经抛弃了Segment分段锁机制,利用CAS+Synchronized来保证并发更新的安全,底层依然采用数组+链表+红黑树的存储结构。 二、变量解释 1. table:默认为null,初始化发生在第一次插入操作,默认大小为16的数组,用来存储Node节点数据,
阅读全文
摘要:一、背景 多线程数量的问题,一般情况下,多线程数量要等于机器CPU核数-1。 二、实例 1、解决问题:如何让n个线程顺序遍历含有n个元素的List集合 import java.util.ArrayList; import java.util.List; import org.apache.commo
阅读全文
摘要:一、背景 用多线程接收推送的订单数据,把接收的订单数据存到一个表中。 实现的需求是:如果接收的订单消息在数据库中已经存在,那么执行update操作; 如果没有存在,那么执行insert操作代码逻辑: if(oderid != null){ //该记录已存在 update(); }else{ //写入
阅读全文
摘要:一.LongAdder是什么 JDK1.8时,java.util.concurrent.atomic包中提供了一个新的原子类:LongAdder。提供了原子累计值的方法。 根据Oracle官方文档的介绍,LongAdder在高并发的场景下会比它的前辈————AtomicLong 具有更好的性能,代价
阅读全文
摘要:一.Future是什么 Future表示一个可能还没有完成的异步任务的结果,针对这个结果可以添加Callback以便在任务执行成功或失败后作出相应的操作。 二.Future能做什么 Future在处理异步调用和并发处理时非常有用。 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Ru
阅读全文
摘要:一.ForkJoinPool是什么 ForkJoinPool 是 Java 7 中引入的并发库类。它通常是以递归的方式运行,采用分治思想将大任务分割成几个小任务,小任务继续分割成更小的任务,直至任务不可分割,然后运行这些任务。 Java中的Executor是一种执行器。日常工作中比较容易见到的就是T
阅读全文
摘要:一.Atomic是什么 所谓 Atomic,翻译过来就是原子。原子被认为是操作中最小的单位,一段代码如果是原子的,则表示这段代码在执行过程中,要么执行成功,要么执行失败。 原子操作一般都是底层通过 CPU 的指令来实现。而 atomic 包下的这些类,则可以让我们在多线程环境下,通过一种无锁的原子操
阅读全文
摘要:一.LockSupport是什么 LockSupport是一个线程阻塞工具类,所有的方法都是静态方法,可以让线程在任意位置阻塞,当然阻塞之后肯定得有唤醒的方法。 Doug Lea 的神作concurrent包是基于AQS (AbstractQueuedSynchronizer)框架,AQS框架借助于
阅读全文
摘要:一.CAS是什么 CAS: 全称Compare and swap,字面意思:”比较并交换“。解决多线程并行情况下使用锁造成性能损耗的一种机制。 在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令。 它将内存位置的内容与给定值进行比较,只有在相同的情况下,将
阅读全文
摘要:一.Phaser是什么 java多线程技术提供了Phaser工具类,Phaser表示“阶段器”,一个可重用的同步barrier。 用来解决控制多个线程分阶段共同完成任务的情景问题。其作用相比CountDownLatch和CyclicBarrier更加灵活。 二.Phaser能做什么 通过Phaser
阅读全文
摘要:一.StampedLock是什么 StampedLock类,在JDK1.8时引入,是对读写锁ReentrantReadWriteLock的增强,该类提供了一些功能,优化了读锁、写锁的访问,同时使读写锁之间可以互相转换,更细粒度控制并发。 该类的设计初衷是作为一个内部工具类,用于辅助开发其它线程安全组
阅读全文
摘要:一.AQS是什么 AQS是AbustactQueuedSynchronizer的简称,它是一个Java提高的底层同步工具类,用一个int类型的变量表示同步状态,并提供了一系列的CAS操作来管理这个同步状态。 AQS的主要作用是为Java中的并发同步组件提供统一的底层支持。 同步工具类Semaphor
阅读全文
摘要:一.Exechanger是什么 Exchanger 是 JDK 1.5 开始提供的一个用于两个工作线程之间交换信息数据的封装工具类,简单说就是一个线程在完成一定的事务后想与另一个线程交换数据, 则第一个先拿出数据的线程会一直等待第二个线程,直到第二个线程拿着数据到来时才能彼此交换对应数据。 它提供一
阅读全文
摘要:一.Semaphore是什么 Semaphore 是一个计数信号量,必须由获取它的线程释放。用于管理一组资源,内部是基于AQS的共享模式。它相当于给线程规定一个量从而控制允许活动的线程数。 Semaphore 是 synchronized 的加强版,作用是控制线程的并发数量。就这一点而言,单纯的sy
阅读全文
摘要:一.CyclicBarrier是什么 CyclicBarrier是一个同步工具类,它允许一组线程互相等待,直到到达某个公共屏障点。 与CountDownLatch不同的是该barrier在释放等待线程后可以重用,所以称它为循环(Cyclic)的屏障(Barrier)。 CyclicBarrier支持
阅读全文
摘要:一.CountDownLatch是什么 CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,它允许一个或多个线程等待直到在其他线程中一组操作执行完成。 latch是门闩的意思,CountDown是倒数计数的意思。 CountDownLatch能够使一个线程在等待另外一些线程完成
阅读全文
摘要:一.BlockingQueue是什么 BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞。 被阻塞的情况主要有如下两种: (1)当队列满了的时候进行入队列操作; (2)当队列空了的时候进行出队列操作; java.util.concurrent 包里
阅读全文
摘要:一.ThreandLocal是什么 ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。早在JDK 1.2的版本中就提供java.lang.ThreadLocal。 ThreadLocal是一个关于创建线程局部变量的类。Thread
阅读全文