JAVA多线程
文章平均质量分 88
JYY_JYY_
这个作者很懒,什么都没留下…
展开
-
Java并发编程12——CopyOnWrite系列
CopyOnWrite系列 写时复制;弱一致性;写加锁,读快照 CopyOnWriteArrayList 属性:reentrantLock + volatile Object[] add方法:先加锁,复制写,改变引用对象,解锁 get方法:不加锁,对snapshot操作,存在弱一致性问题 CopyOnWriteArraySet 内部用CopyOnWriteArrayList来代理 12.1 CopyOnWrite CopyOnWrite的意思是写时复制,关于这个的容器集.原创 2021-04-06 17:42:10 · 182 阅读 · 0 评论 -
Java并发编程7——Atomic家族2
原子累加器(JDK1.8):AtomicLong和AtomicDouble的升级类型,专门用于数据统计,性能更高。 DoubleAccumulator DoubleAdder LongAccumulator LongAdder 伪共享问题 缓存行失效 / 伪共享 @sun.misc.Contended注解 Unsafe对象 原子累加器 LongAdder,DoubleAdder 作用:虽然AtomicLong等原子类能够通过CAS进行原子累加操作,但在多线程竞.原创 2021-03-31 10:59:07 · 233 阅读 · 0 评论 -
Java并发编程6——Atomic家族1
概述 基本类型(boolean, int, long, 对象) AtomicBoolean AtomicInteger AtomicLong AtomicReference 数组(Long, Integer, 对象) AtomicLongArray AtomicIntegerArray AtomicReferenceArray 字段更新器(指定对象的指定字段) AtomicLongFieldUpdater AtomicIntegerFieldUpdater .原创 2021-03-30 18:03:00 · 178 阅读 · 0 评论 -
Java并发编程7——AbstractQueuedSynchronizer / ReentrantLock(未完)
ReentrantLock 介绍(与synchronized的区别) 使用方式 源码 NonfairSync 和FairSync AbstractQueuedSynchronizer(AQS) 源码 ReentrantLock 介绍(与synchronized的区别):除了synchronized之外的另一种独占锁 从底层出发 synchronized基于jvm级别,而ReentrantLock属于API级别 从性能出发 synchronized..原创 2021-03-30 17:27:54 · 151 阅读 · 1 评论 -
Java并发编程4——Executor / ExecutorService / ThreadPoolExecutor线程池
继承关系 Executor接口(顶层接口) ExecutorService接口 AbstractExecutorService抽象类 ThreadPoolExecutor实现类 ThreadPoolExecutor 属性 线程池状态(ctl属性) 构造器 / 参数 线程池运行机制 源码级别 Work类 Executors工具类提供的线程池实现 nexFixedThreadPool:固定大小的线程池 newCachedThreadPool:带缓冲池.原创 2021-03-29 15:45:35 · 300 阅读 · 1 评论 -
Java并发编程3——JMM / synchronized / volatile / Monitor / 加锁算法
synchronized和volatile Java内存模型(原子性,可见性,有序性) volatile 可见性:内存语义 有序性:内存屏障 synchronized 两种加锁方式 实例加锁:synchronized(this) / 普通方法 类对象加锁:synchronized(this.class) / 静态方法 底层原理:Monitor monitorenter / monitorexit / ACC_SYNCRONIZED C.原创 2021-03-19 10:52:06 · 281 阅读 · 0 评论 -
Java并发编程2——Java线程
Java线程 线程的创建(Thread,Runnable,FutureTask) 线程的常用方法 线程的生命周期和状态 操作系统层面:五种状态 Java API层面:六种状态 锁对象的方法:wait()和notify() 执行原理 WAITING与BLOCKED状态的区别 wait()与sleep()的区别 notify()与notifyAll()的区别 虚假唤醒 LockSupport类的方法:park()和unpark(thread).原创 2021-03-16 21:52:03 · 132 阅读 · 0 评论 -
Java并发编程1——基础知识
基础 并行和并发 同步和异步 线程 线程的创建(Thread,Runnable,FutureTask) 线程的常用方法 1. 基础 概念:并发和并行 并发(concurrent ):同一时间应对多件事的能力。例如:一个人交替做多件事 并行(parallel ):同一时间动手做多件事的能力。例如:三个人每人负责一件事 概念:同步和异步 以方法调用为例 同步:需要等待结果返回才能继续运行 异步:不需要等待结果返回 2. 线程 线程创建的三种方式 .原创 2021-03-16 21:40:55 · 114 阅读 · 0 评论 -
Java并发编程9——CountDownLatch / CyclicBarrier / Semaphore
1. CountDownLatch 倒计时锁 1.1 介绍与用法 用来进行线程同步协作,让一个线程等待其他所有线程完成倒计时后再恢复运行(在其之前一般都使用join(),但是join()针对单个不够灵活) 用法:需要被恢复的线程执行await(),其他线程执行完后countDown(); public static void main(String[] args){ //创建 CountDownLatch latch = new CountDownLatch(2);原创 2020-08-11 20:42:32 · 235 阅读 · 0 评论 -
Java并发编程——笔记与总结
JUC并发包结构图 1.executor: 1.1 ThreadPoolExecutor:https://blog.csdn.net/qq_41157876/article/details/107449937 1.2 ScheduledThreadPoolExecutor: 1.3 Future和Callable: 2. tools工具包原创 2020-08-11 06:43:21 · 441 阅读 · 0 评论 -
多线程笔记6——JUC并发包中锁原理
1.LockSupport工具类 主要作用是挂起和唤醒线程,底层是由Unsafe类实现。 void park() / void unpark(Thread thread / void parkNanos(long nanos) / park(Object blocker) Thread 类里面有个变量 volatile Object parkBlocker 用来存放 park 方法传递的 block 对象,也就是把blocker 变量存放到了调用 park 方法的线.原创 2020-07-31 19:40:01 · 227 阅读 · 0 评论 -
Java并发编程14——ThreadLocal
ThreadLocal ThreadLocal变量:一个ThreadLocal在一个线程中是共享的,在不同线程之间又是隔离的(每个线程都只能看到自己线程的值) 1. ThreadLocal和synchronized的区别 虽然两者都是处理多线程并发访问量的问题,但两者处理问题的角度和思路不同 synchronized threadLocal 原理 时间换空间;让不同线程排队访问 空间换时间;为每个线程都提供了变量的副本,互不干扰 侧重点 多线程之间访问资源的.原创 2020-07-30 08:00:42 · 211 阅读 · 0 评论