![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程及并发面试点
逛逛1973
一位知识构架全面,学术,工程能力强的算法工程师
展开
-
Redis实现的简单分布式锁
直接看代码package com.jd.medicine.base.common.spring.util;import com.jd.jim.cli.Cluster;import com.jd.medicine.base.common.logging.LogUtil;import com.jd.medicine.base.common.util.StringUtil;import ...原创 2020-03-19 15:54:07 · 231 阅读 · 0 评论 -
【13】高并发处理思路和手段
一、扩容(加内存, 加服务器)原创 2019-01-16 16:42:16 · 144 阅读 · 0 评论 -
【12】并发扩展知识点和总结
一、死锁代码演示死锁package com.mmall.concurrency.example.deadLock;import lombok.extern.slf4j.Slf4j;/** * 一个简单的死锁类 * 当DeadLock类的对象flag==1时(td1),先锁定o1,睡眠500毫秒 * 而td1在睡眠的时候另一个flag==0的对象(td2)线程启动,先锁定...原创 2019-01-16 16:12:54 · 112 阅读 · 0 评论 -
【11】线程调度-线程池
接下来介绍线程池相关的类:1. ThreadPoolExecutor看类的源码,1 . 知道参数的含义 , 2. 知道如何构造一个实例,3. 如何使用一个实例。二、介绍线程池实例的几种状态看这个类提供的方法监控executor框架,三个接口接下来具体看一下线程池以及使用。package com.mmall.concurren...原创 2019-01-16 10:04:31 · 203 阅读 · 0 评论 -
【14】高并发解决方案-缓存
其内存结构,优缺点,内部结构,原理。 其特点使用场景 高并发场景问题实战一定要了解这些问题的解决方法,问题原因,概念。 考虑大局问题很重要,细节不担心。 ...原创 2019-01-25 16:19:04 · 156 阅读 · 0 评论 -
【高并发8】JUC并发容器及安全共享策略总结
并发容器中同步器,大名AQSArrayList -- CopyOnWriteArrayList:写操作时候复制,当有数据写入的时候,从原有的数据中拷贝一份出来在这里写,写完之后,再将原来的数组重新指向新的数组,其这个add操作都是在锁的保护下进行,主要避免在多线程并发操作add时候,复制多个出来把数据搞乱了,CopyOnWriteArrayList缺点1. 拷贝,消耗内存y...原创 2019-01-07 23:44:27 · 292 阅读 · 0 评论 -
【并发8】线程安全-同步容器
文章内容精讲本章主要讲了几种不安全容器 -- 同步容器-- 后面讲 并发容器同步容器主要采用synchronized修饰,而且有两种情况不安全1. 遍历又有增删改查操作时候 2. 同时删除,取得时候前面讲到list等数据结构容器不安全,手动在这些地方容器访问的地方添加同步操作。Java提供现成的分别介绍下:* Vetor 和 stack 都用synchronized进行了...原创 2019-01-07 22:52:54 · 148 阅读 · 0 评论 -
【7】 常见线程不安全的类与写法
StringBuilder 不安全StringBuilder 不安全,但是可以放在方法内局部变量,是堆栈封闭的,StrinBuffer 安全synchronized关键字性能损耗,查看append方法:stringBuffer.append("h");SimpleDateFormat 不安全,除非定义局部变量堆栈封闭 public static SimpleDa...原创 2019-01-07 19:56:04 · 278 阅读 · 0 评论 -
【高并发10】JUC组件扩展(FutureTask, Fork / Join 并行框架 ,阻塞队列BlockingQueue)
线程的实现有两种,继承runable,实现Thread 方法, 但是都有缺陷,得不到线程执行的结果,而future 可以。1. futureTask的使用package com.mmall.concurrency.AQS;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.Callable;import...原创 2019-01-11 20:12:13 · 205 阅读 · 0 评论 -
[6]线程封闭技术
避免并发方法1:不可变对象通过将不可以被修改的对象设计成不可变对象,实现在多线程下线程安全,躲避开并发问题避免并发方法2:线程封闭将一个对象封装到一个线程里,只有一个线程可以看到访问, 从而安全,以下是实现线程封闭的四种方法:通过ThreadLocal + filter 实现一个类在接口处理前已经取好,随用随取,而不是把一个用户信息从request中取出再从controller一直传下去...原创 2019-01-06 19:23:31 · 367 阅读 · 0 评论 -
【5】不可变对象
不可变对象,多参考 String 类和 final的写法。修饰类看String, 修饰方法报错,重点看修饰变量和引用变量的区别package com.mmall.concurrency.immutable;import com.google.common.collect.Maps;import lombok.extern.slf4j.Slf4j;import java.uti...原创 2019-01-06 14:09:18 · 165 阅读 · 0 评论 -
【4】安全发布对象-发布与溢出 | 安全发布对象-四种方法
简介 总结1. 安全发布对象-发布与溢出2. 安全发布对象-四种方法不安全发布代码示例package com.mmall.concurrency.publishDemo;import lombok.extern.slf4j.Slf4j;import java.util.Arrays;/** * 定义一个数组,发布get方法,其他示例线程修改数组 */@Slf4jpubli...原创 2019-01-06 00:14:11 · 636 阅读 · 0 评论 -
【3】线程安全-有序性
一个线程观察其他线程的指令执行顺序,由于指令重排序的存在,这个观察结果杂乱无序,如果两个操作的执行次序无法从这八条规则中得出,就不能保证他们的有序性,虚拟机就可以随意打乱两个指令,对他们重排序。后两个关键字保证一次执行,可以实现有序性,但是java内存模型先天也是有序的,这是因为happens - before 原则-- 先行发生原则–八条原则(深入理解java虚拟机书)happens ...原创 2019-01-05 19:26:22 · 234 阅读 · 0 评论 -
【Java 高并发手记1】基础入门面试讲解-线程安全性-原子性
线程安全性- 原子性前言目录概述Atomic 包相关的技术和原理相当的重要, 一定要好好学习,是线程安全三大特性之一原子性有序性可见性AtomicXXX: CAS、 Unsafe.compareAndSwapXXX原理一定要掌握CAS的原理,compareAndSwapXXX原理AtomicLong 和 LongAdder的使用,对比,优缺点,原理。AtomicRefere...原创 2019-01-05 16:48:55 · 172 阅读 · 0 评论 -
【2】线程安全-可见性
可见性是一个线程对内存的修改可以及时的被其他线程看到。不可见的原因(Java内存模型原理)对于可见性-JVM提供synchronize 和 volatilesynchronize Atomic中讲到的四种修饰,类,块,静态方法。。。volatile原理通俗理解volatile变量值在每次被线程访问时,都强迫从主内存中读取该变量的值。而当该变量发生变化的时候,又强迫...原创 2019-01-05 18:48:25 · 132 阅读 · 0 评论 -
【 高并发9】AQS-AbstractQueuedSynchronizer的详解及其同步组件的使用
一、整体介绍AQS的数据结构AQS的设计AQS实现的大致思路AQS同步组件二、各个组件具体的使用示例*countdownlatch使用场景countdownlatch使用场景并行计算countdownlatch使代码演示package com.mmall.concurrency.AQS;import lombok.extern.slf4j.Slf4j;i...原创 2019-01-10 20:42:11 · 228 阅读 · 0 评论