JUC
文章平均质量分 85
材化胖虎
这个作者很懒,什么都没留下…
展开
-
java并发编程之 volatile关键字
Java 内存模型(Java Memory Model 简称JMM)是一种抽象的概念,并不真实存在,指一组规则或规范,通过这组规范定义了程序中各个变量的访问方式。java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能达到一致的并发效果。所有的共享变量都存储在主内存中(包括实例变量、类变量,静态变量,但是不包括局部变量,因为局部变量是线程私有的,不存在多线程之间的竞争)每个线程都有自己的工作内存,线程工作内存中保留了被线程使用的共享变量的副本。原创 2024-03-14 17:09:37 · 1250 阅读 · 0 评论 -
阻塞队列学习
队列为空的时候,获取元素的线程会等待队列变为非空。队列为满的时候,存储元素的线程会等待队列可以放入元素。添加元素的方法offer(E e):添加元素,不涉及阻塞offer(E e, long timeout, TimeUnit unit):带时间参数的offer,如果队列满了,会阻塞指定时间进行尝试添加,超时才会返回falseput(E e) : 如果没办法添加到队列中,就会一直阻塞下去取出元素的方法(取出并移除):poll() :取出元素,取不到就返回null。原创 2024-03-11 22:06:46 · 827 阅读 · 0 评论 -
线程池ThreadPoolExecutor,线程的一些基础知识学习
除了构造器中需要传入的7个参数外,还要重点关注一下以下属性ctl:原子类int, ThreadPoolExecutor用这样一个32位的int类型维护了两个核心属性线程池状态:高三位表示工作线程的个数:低29位表示,因此一个ThreadPoolExecutor最多运行2^29个工作线程workers:存放工作线程的集合,是一个HashSet,因此在添加工作线程到workers里面的时候,要加锁保证线程安全mainLock:一个ReentrantLock可重入锁/**原创 2024-03-04 20:32:14 · 662 阅读 · 0 评论 -
并发编程 java锁机制
并发环境下,会存在多个线程对同一个资源进行争抢的情况,假设线程A对资源正在进行修改,此时线程B又对同一资源进行了修改,就会导致数据不一致的问题。为了解决这个问题,很多编程语言引入了锁机制。通过一种抽象的“锁”来对资源进行锁定,当一个线程持有“锁”时,其他线程必须等待 ------ 在临界资源上对线程进行一种串行化处理。java中,悲观锁的实现是基于object的 ------ 也就是说,每个对象都拥有一把锁,这个锁存放在对象头中,记录了当前对象被哪个线程所占用(持有)。原创 2024-02-07 20:26:06 · 1012 阅读 · 0 评论 -
定时任务,ScheduledExecutorService
ScheduledExecutorService可以实现任务的循环执行,可以当做一个简单的定时任务组件,因有线程池的特性,因此可以多任务之间线程并发执行,不影响主线程业务。以上一次任务执行时间为准,加上任务时间间隔作为下一次任务开始的时间。注意,如果没有try catch住,出现异常了,那么后续定时任务就无法继续执行了。注意,如果没有try catch住,出现异常了,那么后续定时任务就无法继续执行了。如果没有执行完毕,则等待上一个任务执行完,立刻执行。因此,此方法不能严格保证任务一定按照时间间隔去执行。原创 2023-03-23 17:22:54 · 1546 阅读 · 0 评论 -
理解 ConcurrentHashMap
ConcurrentHashMap的实现原理ConcurrentHashMap 在 JDK1.7 和 JDK1.8 的实现方式是不同的JDK1.7下的ConcurrentHashMap实现原理是数组加链表,jdk1.7下,ConcurrentHashMap由segment 数组结构和 hashEntry 数组结构构成的,每个hashEntry相当于HashMap 中的table数组,即 ConcurrentHashMap 把哈希桶数组切分成小数组(Segment ),每个小数组有 n 个 Has原创 2022-05-05 21:53:30 · 1889 阅读 · 0 评论