
JUC
超人不会飞2018
这个作者很懒,什么都没留下…
展开
-
多线程场景下异常回滚
思路:每个线程手动提交事务。通过栅栏,等所有子线程都执行到栅栏处等待,最后一个子线程到到时候,通过redis里面存储的成功数量是否和总数量一致,是则提交所有事务,否则回滚所有事务。@Servicepublic class TestService { @Autowired private DataSourceTransactionManager txManager; public void test() throws ExecutionException, Inte原创 2020-07-23 16:31:24 · 1583 阅读 · 0 评论 -
ThreadLocal & InheritableThreadLocal
ThreadLocal关系图ThreadLocal#set() public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else原创 2020-05-23 15:21:43 · 187 阅读 · 0 评论 -
CyclicBarrier源码解读
首先看他的两个构造方法:/** The number of parties */private final int parties;/* The command to run when tripped */private final Runnable barrierCommand;public CyclicBarrier(int parties, Runnable barrierAc...原创 2020-02-21 11:11:09 · 110 阅读 · 0 评论 -
ReentrantLock和AbstractQueuedSynchronizer源码解读
ReentrantLock lock = new ReentrantLock();lock.lock();lock.unlock();首先解释几个成员变量:抽象类AbstractQueuedSynchronizer中:内部类Node:获取锁失败的线程会封装成Node放入到队列head:同步队列的头Nodetail:同步队列的尾Nodestate:是一个int值,...原创 2020-02-18 23:48:21 · 150 阅读 · 0 评论 -
ArrayBlockingQueue源码分析
ArrayBlockingQueue是阻塞队列,FIFO先进先出。阻塞队列api:插入:add(e):添加元素到队列中,如果队列满了,继续插入元素会报错,IllegalStateException。offer(e):添加元素到队列,同时会返回元素是否插入成功的状态,如果成功则返回 trueoffer(e,time,unit):当阻塞队列满了以后继续添加元素,...原创 2020-02-11 22:56:54 · 101 阅读 · 0 评论