并发编程
Andy2019
这个作者很懒,什么都没留下…
展开
-
并发编程与高并发解决方案学习(线程封闭-ThreadLocal)
一、概念线程封闭就是把对象封装到一个线程里,只有一个线程能看到这个对象,那么这个对象不是线程安全的,也不会出现线程安全问题,因为只能在一个线程里面访问。二、线程封闭的三种方式:Ad-hoc线程封闭:程序控制实现,最糟糕,忽略堆栈封闭:局部变量,无并发问题ThreadLocal线程封闭:特别好的封闭方法 三、有的人会有疑问:之前没有学过并发,为什么我的程序大部分执行也都是没有问题的呢? 其实就...原创 2018-04-03 09:10:55 · 488 阅读 · 0 评论 -
并发编程与高并发解决方案学习(常见类线程安全性研究)
StringBuilder 非线程安全import com.mmall.concurrency.annoations.NotThreadSafe;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;im...原创 2018-04-03 10:51:44 · 514 阅读 · 3 评论 -
并发编程与高并发解决方案学习(同步容器Vector、Collections)
ArrayList->Vector,StackHashMap->HashTable(key,value不能为null)Collections.synchronizedXXX(List、Set、Map)Vector 线程安全的原因(源码) /** * Appends the specified element to the end of this Vector. *...原创 2018-04-03 11:17:13 · 362 阅读 · 0 评论 -
并发编程与高并发解决方案学习(并发容器及其安全共享策略)
CopyOnWriteArrayList的数据结构,如下图所示:说明:1. CopyOnWriteArrayList实现了List接口,因此它是一个队列。2. CopyOnWriteArrayList包含了成员lock。每一个CopyOnWriteArrayList都和一个互斥锁lock绑定,通过lock,实现了对CopyOnWriteArrayList的互斥访问。3. CopyOnWriteAr...原创 2018-04-03 11:32:59 · 347 阅读 · 0 评论 -
并发编程与高并发解决方案学习(J.U.C之CyclicBarrier、Exchanger)
也是一个同步辅助类,它允许一组线程相互等待直到到达某个公共的屏障点,通过它可以完成多个线程之间相互等待,只有当每个线程都准备就绪后才能各自继续往下执行后面的操作,和CountDownLoatch有相似的地方,都是通过计数器实现的,当某个线程调用了await方法之后,该线程就进入了等待状态,而且计数器加1,它又叫做循环屏障,适合多线程计算数据,最后合并计算结果的应用场景import lombok.e...原创 2018-04-03 20:37:48 · 490 阅读 · 0 评论 -
并发编程与高并发解决方案学习(J.U.C之ReentrantLock与锁)
ReentrantLock(可重入锁) 和Synchronized区别※可重入性 两者差别不大※锁的实现 Synchronized是JVM实现,ReentrantLock 是JDK实现※性能的区别 Synchronized 引入偏向锁,轻量级锁等之后两者效率差不多※功能区别 1.便利性 Synchronized 使用方便 2.锁的细粒度和灵活度...原创 2018-04-04 08:56:00 · 431 阅读 · 0 评论 -
并发编程与高并发解决方案学习(J.U.C之Future、FutureTask、ForkJoin)
Callable与Runnable接口对比Future接口import lombok.extern.slf4j.Slf4j;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.ut...原创 2018-04-04 08:56:12 · 802 阅读 · 0 评论 -
并发编程与高并发解决方案学习(线程池)
继承Thread的弊端1.每次new Thread的时候都需要新建一个线程,性能差2.线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或者OOM3.Thread类缺少更多功能,比如更多的执行、定期执行、线程中断。线程池的好处1.重用存在的线程,减少对象创建、消亡的开销、性能佳2.可以有效的控制最大并发线程数,提高系统资源利用率,同时可以避免过多资源竞争,避免阻塞。3...原创 2018-04-04 08:56:36 · 659 阅读 · 1 评论 -
并发编程与高并发解决方案学习(J.U.C之BlockingQueue)
前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起...转载 2018-04-04 08:56:27 · 623 阅读 · 0 评论 -
并发编程与高并发解决方案学习(CPU多级缓存和缓存一致性)
CPU多级缓存为什么需要CPU cache:CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源。所以cache的出现,是为了缓解CPU和内存之间速度的不匹配问题(结构:cpu->cache->memory)CPU cache有什么意义1)时间局部性:如果某个数据被访问,那么在不久的将来它很可能再次被访问2)空间局部性:如果某个数据被访问,那么与...原创 2018-04-02 14:24:50 · 2695 阅读 · 0 评论 -
并发编程与高并发解决方案学习(J.U.C之AQS-CountDownLatch、Semaphore)
※使用Node实现FIFO队列,可以用于构建锁或者其他同步装置的基础框架※利用int类型表示状态 state=0表示还没有线程获取锁 state=1表示有现成获取锁,大于1表示可重入锁数量※使用方法是继承 AQS使用模板方法模式,继承模板方法,复写其中的方法※子类通过继承并通过实现它的方法管理其状态{acquire和release}的方法操作状态※可以同时实现排它锁和共享锁模式(独占、共享)AQS...原创 2018-04-03 17:23:17 · 815 阅读 · 0 评论 -
并发编程与高并发解决方案学习(安全发布对象Singleton、final)
一、相关概念发布对象:使一个对象能够被当前范围之外的代码所使用对象逸出:一种错误的发布。当一个对象还没有构造完成时,就使它被其他线程所见。发布对象import vip.fkandy.concurrency.annoations.NotThreadSafe;import lombok.extern.slf4j.Slf4j;import java.util.Arrays;/...原创 2018-04-03 08:26:10 · 590 阅读 · 1 评论 -
并发编程与高并发解决方案学习(导读)
一、并发编程内容:1.线程安全线程安全:就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问,直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全:就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据2.线程封闭当访问共享的可变数据时,通常需要同步。一种避免同步的方式...原创 2018-04-02 14:24:16 · 596 阅读 · 0 评论 -
并发编程与高并发解决方案学习(并发编程初体验)
以下都是发生线程安全的案例:模拟5000个请求,并发数200package vip.fkandy.chapter02;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import jav...原创 2018-04-02 07:36:58 · 1598 阅读 · 1 评论 -
并发编程与高并发解决方案学习(并发与高并发基本概念)
一、概念 并发:同时拥有两个或两个以上线程,如果程序在单核处理器上运行,多个线程将替换地换入或者换出内存,这些线程是同时"存在"的,每个线程都处于执行过程中的某个状态,如果运行在多核处理器上,此时程序中的每个线程都将分配到一个处理器核上,因此可以同时运行。 高并发:高并发是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理多个请求二、基本概念 ...原创 2018-04-02 07:40:04 · 799 阅读 · 0 评论 -
并发编程与高并发解决方案学习(并发的优势与风险)
原创 2018-04-02 14:25:18 · 724 阅读 · 0 评论 -
并发编程与高并发解决方案学习(Java 内存模型)
JMM(Java Memory Model) JMM是一种规范,规范了Java虚拟机与计算机内存是如何协同工作的,规定了一个线程如何和何时可以看到其他线程修改过的共享变量的值,以及在必须的时候如果同步的访问共享变量。栈 栈的优势:存取速度比堆要快,仅次于计算机里面的寄存器,栈的数据是可以共享的。缺点:存放数据的大小与生成器必须是确定的,栈中主要存放基本类型变量和对象的句柄。Java内存...原创 2018-04-02 14:25:05 · 1077 阅读 · 0 评论 -
并发编程与高并发解决方案学习(CPU多级缓存-乱序执行优化)
处理器为提高运算速度而做出违背代码原有顺序的优化例如:计算a*b的值单核时候,执行会是:多核时候,在CPU乱序执行优化的时候可能变成单核处理器时代处理器能够保证处理器做出的优化不会影响结果,但是多核时代就会造成乱序,使最终结果错误...原创 2018-04-02 14:32:07 · 1268 阅读 · 1 评论 -
并发编程与高并发解决方案学习(线程安全性-可见性volatile)
一、导致共享变量在线程间不可见的原因线程交叉执行重排序结合线程交叉执行共享变量更新后的值没有在工作内存与主内存间及时更新二、可见性-Synchronized线程解锁前,必须把共享变量的最新值刷新到主内存线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存重新读取最新值(注意:加锁与解锁是同一把锁)三、可见性-volatile通过加入内...原创 2019-11-17 15:50:42 · 474 阅读 · 0 评论 -
并发编程与高并发解决方案学习(线程安全性-有序性happens-before)
Java内存模型中,允许编译器和处理器对指令进行重排序,但是重排序的过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。volatile 、snychronized、 Lock有序性-happens-before原则※程序次序规则:一个线程内,按照代码执行,书写在前面的操作先行发生于书写在后面的操作。※锁定规则:一个unLock操作先行发生于后面对同一个锁的lock操作※volati...原创 2018-04-02 15:28:28 · 441 阅读 · 0 评论 -
并发编程与高并发解决方案学习(线程安全性-原子性Atomic)
一、定义 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的二、线程安全三要素:原子性:提供了互斥访问,同一时刻只能有一个线程来对他进行操作可见性:一个线程对主内存的修改可以及时的被其他线程观察到有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序...原创 2018-04-02 15:07:23 · 834 阅读 · 0 评论 -
并发编程与高并发解决方案学习(目录)
目录1.并发编程与高并发解决方案学习(导读)2.并发编程与高并发解决方案学习 (并发编程初体验)3.并发编程与高并发解决方案学习(并发与高并发基本概念)4.并发编程与高并发解决方案学习 (CPU多级缓存和缓存一致性)5.并发编程与高并发解决方案学习(CPU多级缓存-乱序执行优化)6.并发编程与高并发解决方案学习(Java 内存模型)7.并发编程与高...原创 2018-04-03 13:16:47 · 1673 阅读 · 0 评论