并发编程

  • 2024.10.11 | cuithink | 64次围观
    ConcurrentHashMap
    1. ConcurrenHashMap存储结构?HashMap和ConcurrenHashMap在存储结构上是一模一样的。数组 + 链表 + 红黑树。存储结构 红黑树出现的原因 链表何时转换为红黑树 为什么链表长度为8才转红黑树 红黑树结构情况下,如果删除元素,导致红黑树元素个数小于等于6,会退化为链表。数组扩容触发的两种情况2. ConcurrentHashMap保证写操作线程安全的方式数组上扔数据,CAS保证安全。 没有哈希冲突的情况。链表/红黑树扔数据,synchron...
  • 2024.10.11 | cuithink | 77次围观
    ReentrantLock解析
    AQS概述AQS就是AbstractQueuedSynchronizer抽象类,AQS其实就是JUC包下的一个基类,JUC下的很多内容都是基于AQS实现了部分功能,比如ReentrantLock,ThreadPoolExecutor,阻塞队列,CountDownLatch,Semaphore,CyclicBarrier等等都是基于AQS实现。首先AQS中提供了一个由volatile修饰,并且采用CAS方式修改的int类型的state变量。其次AQS中维护了一个双向链表,有he...
  • 2024.10.11 | cuithink | 9次围观
    ReentrantLock和synchronized的区别
    核心区别:ReentrantLock是个类,synchronized是关键字,当然都是在JVM层面实现互斥锁的方式效率区别:如果竞争比较激烈,推荐ReentrantLock去实现,不存在锁升级概念。而synchronized是存在锁升级概念的,如果升级到重量级锁,是不存在锁降级的。底层实现区别:实现原理是不一样,ReentrantLock基于AQS实现的,synchronized是基于ObjectMonitor功能向的区别:ReentrantLock的功能比synchroni...
  • 2024.10.11 | cuithink | 89次围观
    并发三大特性-有序性
    三、有序性3.1 什么是有序性在Java中,.java文件中的内容会被编译,在执行前需要再次转为CPU可以识别的指令,CPU在执行这些指令时,为了提升执行效率,在不影响最终结果的前提下(满足一些要求),会对指令进行重排。指令乱序执行的原因,是为了尽可能的发挥CPU的性能。Java中的程序是乱序执行的。Java程序验证乱序执行效果:static int a,b,x,y; public static void main(St...
  • 2024.10.11 | cuithink | 10次围观
    并发编程三大特性-可见性
    二、可见性2.1 什么是可见性可见性问题是基于CPU位置出现的,CPU处理速度非常快,相对CPU来说,去主内存获取数据这个事情太慢了,CPU就提供了L1,L2,L3的三级缓存,每次去主内存拿完数据后,就会存储到CPU的三级缓存,每次去三级缓存拿数据,效率肯定会提升。这就带来了问题,现在CPU都是多核,每个线程的工作内存(CPU三级缓存)都是独立的,会告知每个线程中做修改时,只改自己的工作内存,没有及时的同步到主内存,导致数据不一致问题。可见性问题的代码逻辑private&nb...
  • 2024.10.11 | cuithink | 22次围观
    并发编程的三大特性-原子性
    一、原子性1.1 什么是并发编程的原子性JMM(Java Memory Model)。不同的硬件和不同的操作系统在内存上的操作有一定差异的。Java为了解决相同代码在不同操作系统上出现的各种问题,用JMM屏蔽掉各种硬件和操作系统带来的差异。让Java的并发编程可以做到跨平台。JMM规定所有变量都会存储在主内存中,在操作的时候,需要从主内存中复制一份到线程内存(CPU内存),在线程内部做计算。然后再写回主内存中(不一定!)。原子性的定义:原子性指一个操作是不可分割的,不可中断的...
  • 2024.10.11 | cuithink | 100次围观
    线程的创建
     继承Thread类 重写run方法启动线程是调用start方法,这样会创建一个新的线程,并执行线程的任务。如果直接调用run方法,这样会让当前线程执行run方法中的业务逻辑。public class MiTest {     public static void main(String[] args) {   &nbs...
  • 2024.10.11 | cuithink | 88次围观
    线程基本概念
    1.1 进程与线程A什么是进程?进程是指运行中的程序。 比如我们使用钉钉,浏览器,需要启动这个程序,操作系统会给这个程序分配一定的资源(占用内存资源)。什么线程?线程是CPU调度的基本单位,每个线程执行的都是某一个进程的代码的某个片段。举个栗子:房子与人比如现在有一个100平的房子,这个方式可以看做是一个进程房子里有人,人就可以看做成一个线程。人在房子中做一个事情,比如吃饭,学习,睡觉。这个就好像线程在执行某个功能的代码。所谓进程就是线程的容器,需要线程利用进程中的一些资源,...
  • 2024.10.11 | cuithink | 29次围观
    单例模式
    4. 单例模式单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了一种全局访问点以访问该实例饿汉式和懒汉式的区别初始化时机不同:饿汉式单例模式在类加载时就立即初始化并创建单例对象,而懒汉式单例模式则是在第一次使用时才会进行初始化,并创建单例对象。线程安全性不同:饿汉式单例模式在类加载时就创建了单例对象,因此天生就是线程安全的。而懒汉式单例模式在第一次使用时才会创建单例对象,如果多个线程同时调用getInstance()方法,可能会创建出多个单例对象,因此需要进行同...
  • 2024.09.11 | cuithink | 26次围观
    xmind版并发三大特性
    ...
1