![](https://img-blog.csdnimg.cn/20190927132644174.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
JUC多线程及高并发
多线程与高并发
开心的小尾叭
这个作者很懒,什么都没留下…
展开
-
synchronized锁升级过程详解
注:synchronized锁流程如下 第一步,检查MarkWord里面是不是放的自己的ThreadId ,如果是,表示当前线程是处于 “偏向锁” 第二步,如果MarkWord不是自己的ThreadId,锁升级,这时候,用CAS来执行切换,新的线程根据MarkWord里面现有的ThreadId,通知之前线程暂停,之前线程将Markword的内容置为空。 第三步,两个线程都把对象的HashCode复制到自己新建的用于存储锁的记录空间,接着开始通过CAS操作,把共享对象的MarKword的内容修改为自己新建..原创 2020-06-26 22:17:54 · 2034 阅读 · 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 · 125 阅读 · 0 评论 -
从源码角度彻底理解ReentrantLock(重入锁)
源码分析ReentrantLock转载 2020-05-20 13:14:55 · 111 阅读 · 0 评论 -
Java并发——Synchronized关键字和锁升级,详细分析偏向锁和轻量级锁的升级
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/tongdanping/article/details/79647337 目录 一、Synchronized使用场景 二、Synchronized实现原理 三、锁的优化 1、锁升级 2、锁粗化 3、锁消除 一、Synchronized使用场景 Synchronized是一个同步关键字,在某些多线程场景下,如果不进行同步会导致数据不安全,而Synchr原创 2020-05-14 17:29:03 · 216 阅读 · 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 · 352 阅读 · 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 · 724 阅读 · 0 评论 -
多线程处理任务
long startTime =System.currentTimeMillis(); List<AbstractDataRectify> taskjob = new ArrayList<AbstractDataRectify>(); AbstractDataRectify scope = new DataRectifyDocNumScopeImpl(); //...原创 2020-04-21 12:41:35 · 156 阅读 · 0 评论 -
ThreadLocal<Connection>
为什么要学习ThreadLocal? 从上面可以得出:ThreadLocal可以让我们拥有当前线程的变量,那这个作用有什么用呢??? 1.1管理Connection 最典型的是管理数据库的Connection:当时在学JDBC的时候,为了方便操作写了一个简单数据库连接池,需要数据库连接池的理由也很简单,频繁创建和关闭Connection是一件非常耗费资源的操作,因此需要创建数据库连接池~ 那么,数...原创 2019-10-27 16:03:19 · 523 阅读 · 0 评论 -
Java中的各种锁
乐观锁、悲观锁、公平锁、非公平锁、读锁、写锁、重入锁、不可重入锁、类锁、对象锁、共享锁、排它锁 Synchronized是悲观锁原创 2019-10-15 09:57:52 · 72 阅读 · 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 · 241 阅读 · 0 评论 -
自旋锁的实现
package Juc; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; /** * 自旋锁的手动实现 * 原理对当前线程进行CAS比较交换操作,当第一个线程进入后,期待值为null, * 更新值为当前线程,第二个线程进入由于期待值(null)与主存有值违背...原创 2019-10-03 19:19:53 · 139 阅读 · 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 · 302 阅读 · 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 · 123 阅读 · 0 评论 -
传统版生产者消费者模式2.0
,lock,condition,signalAll package 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 · 74 阅读 · 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 · 64 阅读 · 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 · 320 阅读 · 0 评论 -
集合类ArrayList、HashMap、HashSet线程不安全
为了提高写入性能JDK 1.2 引入了非线程安全容器ArrayList替代Vector package 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 · 157 阅读 · 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 · 126 阅读 · 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 · 110 阅读 · 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 · 67 阅读 · 0 评论 -
Semaphore(多资源多线程)
Semaphore package 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 · 216 阅读 · 0 评论 -
ArrayBlockingQueue
ArrayBlockingQueue package 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 · 126 阅读 · 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 · 74 阅读 · 0 评论 -
synchronized和Lock有什么区别
/* 题目:synchronized和Lock有什么区别?用新的lock有什么好处? 1.原始构成 Synchronized是关键字属于JVM层面, monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖monitor对象只有在同步块或方法中才能调wait/notify等方法) monitorexit Lock 是具体类(java.util.conc...原创 2019-10-01 22:57:55 · 733 阅读 · 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 · 96 阅读 · 0 评论 -
死锁-查错的方法
package Juc; import java.util.concurrent.TimeUnit; /** * 手写死锁 * 死锁:是指俩个或者俩个以上的进程再执行过程中, * 因争夺资源而造成的一种互相等待的现象, * 若无外力干涉那它们都将无法推进下去 */ class HoldLockThread implements Runnable{ private String lo...原创 2019-10-03 18:12:08 · 92 阅读 · 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 · 89 阅读 · 0 评论