
高并发
林头头03
德玛西亚从不退缩
展开
-
AQS简介(附脑图)
什么是AQS(AbstractQueuedSynchronizer) AQS(AbstractQueuedSynchronizer),AQS是JDK下提供的一套用于实现基于FIFO等待队列的阻塞锁和相关的同步器的一个同步框架。这个抽象类被设计为作为一些可用原子int值来表示状态的同步器的基类。如果你有看过类似CountDownLatch类的源码实现,会发现其内部有一个继承了Ab...原创 2019-02-28 20:27:29 · 1167 阅读 · 0 评论 -
java高并发8.2 J.U.C--BlockingQueue阻塞队列,ForkJoin
ForkJoin ForkJoin是Java7提供的一个并行执行任务的框架,是把大任务分割成若干个小任务,待小任务完成后将结果汇总成大任务结果的框架。主要采用的是工作窃取算法,工作窃取算法是指某个线程从其他队列里窃取任务来执行。 在窃取过程中两个线程会访问同一个队列,为了减少窃取任务线程和被窃取任务线程之间的竞争,通常我们会使用双端队列来实现工作窃取算法。被窃取任务的线程永远从...原创 2019-03-10 13:43:00 · 586 阅读 · 0 评论 -
java高并发8.1 J.U.C-- FutureTask
FutureTaskFutureTask是J.U.C中的类,是一个可删除的异步计算类。这个类提供了Future接口的的基本实现,使用相关方法启动和取消计算,查询计算是否完成,并检索计算结果。只有在计算完成时才能使用get方法检索结果;如果计算尚未完成,get方法将会阻塞。一旦计算完成,计算就不能重新启动或取消(除非使用runAndReset方法调用计算)。Runnable与Callab...原创 2019-03-10 13:36:19 · 255 阅读 · 0 评论 -
java高并发7.2 AQS-- ReentrantLock、ReentrantReadWriteLock、StempedLock
ReentrantLockjava中有两类锁,一类是Synchronized,而另一类就是J.U.C中提供的锁。ReentrantLock与Synchronized都是可重入锁,本质上都是lock与unlock的操作。接下来我们介绍三种J.U.C中的锁(ReentrantLock、ReentrantReadWriteLock、tempedLock),其中 ReentrantLock使用sy...原创 2019-03-10 13:32:54 · 341 阅读 · 0 评论 -
java高并发7.1 AQS--CountDownLatch, Semaphore, CyclicBarrier
文章包含了: AQS简介 AQS设计思想 AQS的大致实现思路 AQS组件:CountDownLatch AQS组件:Semaphore AQS组件:CyclicBarrier AQS简介AQS全名:AbstractQueuedSynchronizer,是并发容器J.U.C(java.lang.concurrent)下locks包内的...原创 2019-03-10 12:54:55 · 393 阅读 · 0 评论 -
java高并发脑图
原创 2019-03-09 10:37:07 · 819 阅读 · 0 评论 -
java高并发6.5 并发容器
Java并发容器概述 ArrayList –> CopyOnWriteArrayList HashSet –> CopyOnWriteArraySet TreeSet –> ConcurrentSkipListSet HashMap –> ConcurrentHashMap TreeMap –> Concurrent...原创 2019-03-09 10:35:41 · 319 阅读 · 1 评论 -
java高并发6.4 同步容器
线程安全 -- 同步容器同步容器同步容器分两类,一种是Java提供好的类,另一类是Collections类中的相关同步方法。(1)ArrayList的线程安全类:Vector,StackVector实现了List接口,Vector实际上就是一个数组,和ArrayList非常的类似,但是内部的方法都是使用synchronized修饰过的方法。Stack它的方法也是使用s...原创 2019-03-09 10:28:14 · 230 阅读 · 0 评论 -
java高并发6.3 线程不安全类与写法
1、线程不安全的类常见的不安全的类:如果一个类的对象同时可以被多个线程访问,并且你不做特殊的同步或并发处理,那么它就很容易表现出线程不安全的现象。比如抛出异常、逻辑处理错误…下面列举一下常见的线程不安全的类及对应的线程安全类:(1)StringBuilder与 StringBufferStringBuilder是线程不安全的,而StringBuffer是线程安全的。分析源码...原创 2019-03-09 10:12:17 · 415 阅读 · 0 评论 -
java高并发6.2 线程封闭
不可变对象相当于躲避开了并发的问题, 避免并发除了不可变对象 , 还有线程封闭的方法1、什么是线程封闭?它其实就是把对象封装到一个线程里,只有一个线程能看到这个对象,那么这个对象就算不是线程安全的,也不会出现任何线程安全方面的问题。线程封闭技术有一个常见的应用: 数据库连接对应jdbc的Connection对象,Connection对象在实现的时候并没有对线程安全做太多...原创 2019-03-09 10:07:15 · 243 阅读 · 0 评论 -
java高并发6.1 创建不可变对象
不可变对象 需要根据实际对象是否可以做成不可变对象, 如果可以,尽量变成不可变对象 , 这样一来在多线程环境下就不会有线程安全的问题了*1、不可变对象有一种对象只要它发布了就是安全的,它就是不可变对象。一个不可变对象需要满足的条件: 对象创建一个其状态不能修改 对象所有域都是final类型 对象是正确创建的(在对象创建期间,this引用没有逸出) 2...原创 2019-03-09 10:03:16 · 363 阅读 · 0 评论 -
java高并发5.2 安全发布(单例模式)
安全发布对象示例(多种单例模式演示)如何安全发布对象?共有四种方法 在静态初始化函数中初始化一个对象引用 将对象的引用保存到volatile类型域或者AtomicReference对象中 将对象的引用保存到某个正确构造对象的final类型域中 (目前为止没讲过) 将对象的引用保存到一个由锁保护的域中 下面我们用各种单例模式来演示其中的几种方法 如果...原创 2019-03-09 10:01:37 · 409 阅读 · 0 评论 -
java高并发5.1 安全发布对象
发布对象发布对象使一个对象能够被当前范围之外的代码所使用。在我们的日常开发中,我们经常要发布一些对象, 比如通过类的非私有方法返回对象的引用 或者通过公有静态变量发布对象。 对象逸出一种错误的发布。当一个对象还没有构造完成时,就使它被其他线程所见。________________________________________________________...原创 2019-03-09 09:58:58 · 263 阅读 · 0 评论 -
java高并发4.2 原子性-锁
我们再回顾一下原子性:原子性提供了互斥访问 ,同一时刻只有一个线程能对他进行操作 .同一时刻只有一个线程能对其进行操作的 除了Atomic包之外还有锁锁分为两种:____________________________________________________________________________synchronized依赖于JVM去实现锁,因此...原创 2019-03-09 09:55:54 · 589 阅读 · 0 评论 -
java高并发4.1 原子性-Atomic包
线程安全?当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。线程安全性?线程安全性主要体现在三个方面:原子性、可见性、有序性 原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作 可见性:一个线程对主内存的修改可以及时的被其他...原创 2019-03-09 09:52:57 · 399 阅读 · 0 评论 -
java并发编程与高并发-3.1 git的使用
先用Spring Initialzr生成一个Spring boot项目下面基于视频里的操作:先看一下目前改动的文件---> git statustarget包是不用加到代码仓库的,我们把他移除掉加上这个注释.iml的文件就都不会上传到代码库再看一下效果:---> git status然后把当前还没被版本管理的文件添加进来:--...原创 2019-02-28 21:21:10 · 300 阅读 · 0 评论 -
java并发编程与高并发-2并发基础
CPU多级缓存CPU多级缓存-- 缓存一致性 (MESI)Cache一致性协议在MESI协议中,每个Cacheline有4个状态,可用两个bit表示,它们分别是 状态 描述 M(Modified) 这行数据有效,数据被修改了,和内存中的数据不一致,数据只存在于本cache中 ...原创 2019-02-28 21:16:50 · 324 阅读 · 0 评论 -
java并发编程与高并发-1入门
---该总结参考自 Java并发编程入门与高并发视频首先是几张总结图:高并发处理的思路及手段:接下来来看下面这个例子:执行很多次的结果:count: 4*** 一直小于5000为什么每次都小于5000,而且每次都不一样?第二个例子:执行很多次的结果:count: 4*** ...原创 2019-02-28 21:14:31 · 299 阅读 · 0 评论 -
AtomicInteger与LongAdder的区别
LongAdder与AtomicInteger区别但是这个CAS有没有问题呢?肯定是有的。比如说大量的线程同时并发修改一个AtomicInteger,可能有很多线程会不停的自旋,进入一个无限重复的循环中。Java 8推出了一个新的类,LongAdder,他就是尝试使用分段CAS以及自动分段迁移的方式来大幅度提升多线程高并发执行CAS操作的性能! 在LongAdder的底层实...转载 2019-03-15 09:53:42 · 2344 阅读 · 0 评论