准备秋招-Java并发
文章平均质量分 60
baldist
这个作者很懒,什么都没留下…
展开
-
Java并发05Java线程池
参考:https://blog.csdn.net/qq_29373285/article/details/85238728原创 2021-07-12 11:41:42 · 67 阅读 · 0 评论 -
Java并发04Java中的锁02ReentrantLock
一.锁的获取和释放 1.获取 1.1.非公平 代码块1-1 final boolean nonfairTryAcquire(int acquires) { final Thread current = Thread.currentThread(); int c = getState(); if (c == 0) { if (compareAndSetState(0, acquires))原创 2021-07-08 14:29:20 · 83 阅读 · 0 评论 -
Java并发04Java中的锁01AQS03共享模式
共享式同步状态的获取和释放 1. 获取 代码块1-1 public final void acquireShared(int arg) { if (tryAcquireShared(arg) < 0) doAcquireShared(arg); } 首先看能不能直接获得资源,也就是执行tryAcquireShared(arg)(由子类实现),获取成功返回非负数,流程结束。不成功,进入第2步。 执行doAcquireShared(arg),下面分析该方法。 doAcquir原创 2021-07-05 16:06:58 · 61 阅读 · 0 评论 -
Java并发04Java中的锁01AQS02独占模式
一.独占式同步状态的获取和释放 1. 获取 代码块1-1 public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) selfInterrupt(); } 通过acquire()获取同步状态,关注tryAcquire(arg) 和 acquireQueued原创 2021-07-05 13:10:34 · 92 阅读 · 0 评论 -
Java并发04Java中的锁01AQS01序
简单介绍 AQS:全程AbstractQueuedSynchronizer,翻译为队列同步器,是用来构建锁或者其他同步组件的基础框架。它使用了一个int成员变量表示同步状态,通过内置的FIFO队列完成资源获取线程的排队工作。 使用方式: (1)通常是程序员自己创建子类继承AQS,子类重写父类相应的方法来管理同步状态。这些方法如下图所示: (2)同时AQS还提供模板方法,帮助实现自定义同步组件,如下图所示: ...原创 2021-07-05 10:42:44 · 69 阅读 · 0 评论 -
Java并发03ThreadLocal
一.参考 1.使用及原理 https://www.jianshu.com/p/3c5d7f09dfbd 2.使用场景 https://www.cnblogs.com/zz-ksw/p/12684877.html https://blog.csdn.net/Mind_programmonkey/article/details/118220731 https://www.cnblogs.com/yxysuanfa/p/7125761.html 二.我自己的一点理解 基于这篇文章(https://blog.csd原创 2021-07-04 11:58:11 · 81 阅读 · 0 评论 -
Java并发03一些零碎知识
一.进程和线程的关系和区别 1. 概念 进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位 线程:是进程的一部分,是 CPU 调度的一个基本单位。 2.关系和区别 进程是一段正在执行的程序,是资源分配的基本单元,而线程是CPU调度的基本单元。 进程间相互独立,进程之间不能共享资源。一个进程至少有一个线程,同一进程的各线程共享进程的资源(堆区、方法区)。 线程的创建和切换开销比进程小,引入线程的概念可以带来更好的并发的。 进程间通信可能基于:sock原创 2021-07-02 13:58:31 · 89 阅读 · 1 评论 -
Java并发02Java内存模型04-单例模式双重检查的补充
一.原始方案及存在的问题 public class SingleInstance{ private static SingleInstance instance = null; private SingleInstance(){} public static SingleInstance getInstance(){ if(instance == null){ synchronized(SingleInstance.class){原创 2021-06-30 09:25:01 · 105 阅读 · 1 评论 -
Java并发02Java内存模型03-锁和final的内存语义
一.锁释放或获取的内存语义 释放:当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量值刷新到主内存。 获取:当线程获取锁时,JMM会把该线程对应的本地内存置为无效。 得出结论: 锁释放与volatile写内存语义相同,锁获取与volatile读内存语义相同。 二.内存语义的实现 1. 原理 锁分为公平锁和非公平锁,基于AQS,而AQS又基于volatile变量加CAS操作。 对加锁: 对公平锁:先判断是否有之前就等待加锁的线程,有那本线程加锁失败,没有就对state进行CAS操作。 对非公原创 2021-06-29 18:45:43 · 91 阅读 · 0 评论 -
Java并发02Java内存模型02-volatile内存语义
一.volatile特性 关于volatile基础,见:https://blog.csdn.net/baldist/article/details/118300089 可见性:对一个volatile变量的读,总是能看到任意线程对这个volatile变量最后的写入。 原子性:对任意单个volatile变量的单个读\写操作具有原子性,但复合操作没有。(例如:i++) 二.写-读内存语义 写:当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值刷新到主内存。 读: 当读一个volat原创 2021-06-29 16:05:59 · 58 阅读 · 0 评论 -
Java并发02Java内存模型01-预备知识
一.Java内存模型的抽象结构 局部变量、方法定义参数、异常处理器参数不会在线程间共享,不存在内存可见性问题,不收内存模型影响。 实例域、静态域和数组元素都存储在堆内存中,堆内存在线程之间共享。 Java线程之间的通信由Java内存模型(JMM)控制。线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,本地内存存储了该线程读\写共享变量的副本。JMM通过控制主内存与每个线程的本地内存之间的交互,来为Java程序员提供内存可见性的保证。 二. 重排序 1. 简介 为了提高性能,指令可能原创 2021-06-29 14:03:01 · 85 阅读 · 2 评论 -
Java并发01基本原理03-原子操作
一. 处理器实现原子操作 通过总线锁保证原子性:某个处理器在总线上输出LOCK #信号,其他处理器的请求将被阻塞,该处理器独占共享内存。 通过缓存锁保证原子性:即不锁总线了,而是把该内存地址对应的缓存行锁住。例如:多个CPU都有某个内存地址的缓存行,如果某个CPU要对这个缓存行进行写回操作时,那么内存地址对应的所有缓存行都被锁住。 参考: https://yemablog.com/posts/cache-locking-2 https://www.jianshu.com/p/2c212631c7ca h原创 2021-06-28 14:48:09 · 65 阅读 · 0 评论 -
Java并发01基本原理02-volatile
一.作用 volatile保证共享变量的可见性。 二.原理 被volatile修饰的变量进行写操作的时候,其汇编代码会多出一条带Lock前缀的指令,这个Lock前缀指令在多核处理器下会引发两件事: 将当前处理器缓存行的数据写回到系统内存 这个写回操作使得在其他CPU里缓存了该内存地址的数据无效。 所以,当一个线程修改某个被volatile修饰的变量时,其他线程能够立即读到该变量的最新值,保证可见性。 三.优化 LinkedTransferQueue这个类在使用volatile变量的时候,用追加的字节的方原创 2021-06-28 12:58:57 · 57 阅读 · 0 评论 -
Java并发01基本原理01-synchronized(02)
一.使用 class Add implements Runnable { static Integer num=0; Object obj; public Add(Object obj) { this.obj=obj; } @Override public void run() { synchronized (obj) { for (int i=0;i<100;i原创 2021-06-27 15:54:48 · 51 阅读 · 0 评论 -
Java并发01基本原理01-synchronized(01)
szxfsd原创 2021-06-27 13:47:53 · 94 阅读 · 1 评论