
JUC多线程及高并发
多线程与高并发
开心的小尾叭
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
synchronized锁升级过程详解
注:synchronized锁流程如下第一步,检查MarkWord里面是不是放的自己的ThreadId ,如果是,表示当前线程是处于 “偏向锁”第二步,如果MarkWord不是自己的ThreadId,锁升级,这时候,用CAS来执行切换,新的线程根据MarkWord里面现有的ThreadId,通知之前线程暂停,之前线程将Markword的内容置为空。第三步,两个线程都把对象的HashCode复制到自己新建的用于存储锁的记录空间,接着开始通过CAS操作,把共享对象的MarKword的内容修改为自己新建..原创 2020-06-26 22:17:54 · 2176 阅读 · 2 评论 -
AQS原理
以非公平锁为例子:package com.jmdf.redis.project.aqs;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class TestAQS { private static Lock lock = new ReentrantLock(); public static void main(String[] args)原创 2020-05-30 19:59:08 · 163 阅读 · 0 评论 -
从源码角度彻底理解ReentrantLock(重入锁)
源码分析ReentrantLock转载 2020-05-20 13:14:55 · 159 阅读 · 0 评论 -
Java并发——Synchronized关键字和锁升级,详细分析偏向锁和轻量级锁的升级
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.youkuaiyun.com/tongdanping/article/details/79647337目录一、Synchronized使用场景二、Synchronized实现原理三、锁的优化1、锁升级2、锁粗化3、锁消除一、Synchronized使用场景Synchronized是一个同步关键字,在某些多线程场景下,如果不进行同步会导致数据不安全,而Synchr原创 2020-05-14 17:29:03 · 264 阅读 · 0 评论 -
redis实现可重入锁
package com.jmdf.world;import redis.clients.jedis.Jedis;import java.util.HashMap;import java.util.Map;/** * redis实现可重入锁,借助ThreadLocal */public class RedisWithReentrantLock { private Threa...原创 2020-05-06 14:21:57 · 391 阅读 · 0 评论 -
JedisCluster 运用Pipeline技术 批处理插入数据
package redis;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;import java.util.TreeMap;import redis.clients.jedis.HostAndPort;import redis.clients.jed...原创 2020-04-21 12:46:42 · 799 阅读 · 0 评论 -
多线程处理任务
long startTime =System.currentTimeMillis(); List<AbstractDataRectify> taskjob = new ArrayList<AbstractDataRectify>(); AbstractDataRectify scope = new DataRectifyDocNumScopeImpl(); //...原创 2020-04-21 12:41:35 · 216 阅读 · 0 评论 -
ThreadLocal<Connection>
为什么要学习ThreadLocal?从上面可以得出:ThreadLocal可以让我们拥有当前线程的变量,那这个作用有什么用呢???1.1管理Connection最典型的是管理数据库的Connection:当时在学JDBC的时候,为了方便操作写了一个简单数据库连接池,需要数据库连接池的理由也很简单,频繁创建和关闭Connection是一件非常耗费资源的操作,因此需要创建数据库连接池~那么,数...原创 2019-10-27 16:03:19 · 613 阅读 · 0 评论 -
Java中的各种锁
乐观锁、悲观锁、公平锁、非公平锁、读锁、写锁、重入锁、不可重入锁、类锁、对象锁、共享锁、排它锁Synchronized是悲观锁原创 2019-10-15 09:57:52 · 106 阅读 · 0 评论 -
AtomicInteger原子整形与ReentrantLock锁
package Juc;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.locks.ReentrantLock;/** * 测试锁的可见性 * */public class ThreadSafeCache { volatile int Result=0; publi...原创 2019-10-03 19:27:50 · 294 阅读 · 0 评论 -
自旋锁的实现
package Juc;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicReference;/** * 自旋锁的手动实现 * 原理对当前线程进行CAS比较交换操作,当第一个线程进入后,期待值为null, * 更新值为当前线程,第二个线程进入由于期待值(null)与主存有值违背...原创 2019-10-03 19:19:53 · 173 阅读 · 0 评论 -
多线程按顺序调度
package Juc;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;import org.apache.jasper.tagplugins.jstl.core.ForEa...原创 2019-10-03 19:18:34 · 357 阅读 · 0 评论 -
Callable接口与runable和Thread类
package Juc;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;import java.util.concurrent.TimeUnit;/** * Callable与runabl...原创 2019-10-03 19:00:27 · 169 阅读 · 0 评论 -
传统版生产者消费者模式2.0
,lock,condition,signalAllpackage Juc;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * * 高并发:低耦合高内聚,线...原创 2019-10-03 18:39:40 · 103 阅读 · 0 评论 -
手写线程池
package Juc;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;impor...原创 2019-10-03 18:26:25 · 104 阅读 · 0 评论 -
手写缓存(读写锁)
读读共享,写写互斥,读写互斥写锁是独占锁,读锁是共享锁package Juc;import java.util.HashMap;import java.util.Map;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.ReentrantReadWriteLock;import java...原创 2019-10-03 18:18:10 · 392 阅读 · 0 评论 -
集合类ArrayList、HashMap、HashSet线程不安全
为了提高写入性能JDK 1.2 引入了非线程安全容器ArrayList替代Vectorpackage Juc;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;import java.util.UUID;import java...原创 2019-09-29 09:07:40 · 200 阅读 · 0 评论 -
CAS比较并交换
package Juc;import java.util.concurrent.atomic.AtomicInteger;/* * CAS 是什么》? ====》compare And Set * * 比较并交换 * 是JDK的rt.jar包下的sun==》misc的unsafe类,cup并发原语,汇编语言指令保证原子性。 * 保证原子性的原理: * * ...原创 2019-09-29 10:05:01 · 164 阅读 · 0 评论 -
ABA问题
package Juc;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicReference;import java.util.concurrent.atomic.AtomicStampedReference;/** * ABA问题: * 银行服务器存在重复提交问题 * 银行一...原创 2019-09-29 10:36:33 · 149 阅读 · 0 评论 -
CountDownLatch和CyclicBarrier
枚举类的使用:package Juc;import lombok.Getter;public enum CountryEnum { ONE(1,"齐国"),TWO(2,"楚国"),THREE(3,"燕国"),FOUR(4,"赵国"),FIVE(5,"魏国"),SIX(6,"韩国"); @Getter private Integer retCode; @Getter privat...原创 2019-10-01 10:20:03 · 99 阅读 · 0 评论 -
Semaphore(多资源多线程)
Semaphorepackage Juc;import java.util.Random;import java.util.concurrent.Semaphore;import java.util.concurrent.TimeUnit;/** * 多个共享资源,多个线程取抢占 * Semaphore * */public class SemaphoreDemo {...原创 2019-10-01 11:05:17 · 276 阅读 · 0 评论 -
ArrayBlockingQueue
ArrayBlockingQueuepackage Juc;import java.util.List;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.TimeUnit;/** * 阻塞队列...原创 2019-10-01 18:11:05 · 165 阅读 · 0 评论 -
SynchronousQueue
同步队列package Juc;import java.util.concurrent.BlockingQueue;import java.util.concurrent.SynchronousQueue;import java.util.concurrent.TimeUnit;/** * 同步队列SynchronousQueue一次只允许一个元素,消费后才插入下个元素进入队列...原创 2019-10-01 18:28:45 · 105 阅读 · 0 评论 -
synchronized和Lock有什么区别
/*题目:synchronized和Lock有什么区别?用新的lock有什么好处?1.原始构成Synchronized是关键字属于JVM层面,monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖monitor对象只有在同步块或方法中才能调wait/notify等方法)monitorexitLock 是具体类(java.util.conc...原创 2019-10-01 22:57:55 · 809 阅读 · 0 评论 -
生产者消费者3.0
package Juc;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;/** *...原创 2019-10-02 16:58:59 · 150 阅读 · 0 评论 -
死锁-查错的方法
package Juc;import java.util.concurrent.TimeUnit;/** * 手写死锁 * 死锁:是指俩个或者俩个以上的进程再执行过程中, * 因争夺资源而造成的一种互相等待的现象, * 若无外力干涉那它们都将无法推进下去 */class HoldLockThread implements Runnable{ private String lo...原创 2019-10-03 18:12:08 · 131 阅读 · 0 评论 -
Volatile(理解)
volatile是java虚拟机提供的轻量级的同步机制。1.保证可见性。2.不保证原子性。3.禁止指令重排。package Juc;import java.util.concurrent.TimeUnit;class MyData{ /*volatile*/ int number=0; //测试可见性 public void addT060(){ this.numbe...原创 2019-09-27 14:43:04 · 124 阅读 · 0 评论