juc
文章平均质量分 73
帅气的喵喵
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java内存模型与对象头
②. 对象头分为对象标记(markOop)和类元信息(klassOop),类元信息存储的是指向该对象类。(klass)的首地址。原创 2022-08-18 19:57:08 · 151 阅读 · 0 评论 -
ThreadLocal 使用 以及源码分析
首先理解JMM模型①.ThreadLocal本地线程变量,线程自带的变量副本(实现了每一个线程副本都有一个专属的本地变量,主要解决的就是让每一个线程自己用自己的,不跟别人争抢。通过使用get()和set()方法,获取默认值或将其值更改为当前线程所存的副本的值从而避免了线程安全的问题)②.synchronized或者lock,有个管理员,好比,现在大家签到,多个同学(线程),但是只有一只笔,只能同一个时间,只有一个线程(同学)签到,加锁(同步机制是以时间换空间,执行时间不一样,类似于排队)https。....原创 2022-07-22 17:09:11 · 267 阅读 · 0 评论 -
原子操作类使用以及源码分析
注意:使用 TimeUnit.SECONDS.sleep 让主线程进行阻塞 ,在生产环境中及其不规范 使用CountDownLatch 来解决这个问题原创 2022-07-07 18:01:04 · 632 阅读 · 0 评论 -
CAS原理与使用
不使用原子类保证 i++ 线程安全使用原子类保证i++线程安全CAS底层原理? UnSafe类+CAS思想[自旋锁] ①. CAS的全称为Compare-And-Swap ,它是一条CPU并发原语,比较工作内存值(预期值)和主物理内存的共享值是否相同,相同则执行规定操作,否则继续比较直到主内存和工作内存的值一致为止。这个过程是原子的(AtomicInteger类主要利用CAS(compare and swap)+volatile和native方法来保证原子操作,从而避免synchronized的高开销,执原创 2022-07-06 17:19:06 · 201 阅读 · 0 评论 -
ThreadPoolExecutor 线程池底层原理和执行流程
②. maximumPoolSize:线程池能够容纳同时执行的最大线程数,此值必须大于等于1③. keepAliveTime:多余的空闲线程存活时间,当空间时间达到keepAliveTime值时,多余的线程会被销毁直到只剩下corePoolSize个线程为止(非核心线程)④. unit:keepAliveTime的单位 即 TimeUnit 类⑤. workQueue:任务队列即阻塞队列,被提交但尚未被执行的任务(候客区)⑥. threadFactory:线程工厂,用于生成 线程池里的工作线程,一般用默认即原创 2022-06-16 14:44:01 · 363 阅读 · 0 评论 -
ForkJoin使用
Fork/Join 框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个的小任务运算的结果进行 join 汇总 采用 “工作窃取”模式(work-stealing):当执行新的任务时它可以将其拆分分成更小的任务执行,并将小任务加到线程队列中,然后再从一个随机线程的队列中偷一个并把它放在自己的队列中。相对于一般的线程池实现,fork/join框架的优势体现在对其中包含的任务的处理方式上.在一般的线程池中,如果一个线程正在执行的任务由于某些原原创 2022-06-16 17:39:46 · 618 阅读 · 0 评论 -
使用Callable创建线程的FutureTask类
FutureTask 主要意义 主线业务流程依次往下执行,可以单开几个线程做其他事情 ,最终汇总,但汇总只需要汇总一次原创 2022-06-16 16:17:01 · 105 阅读 · 0 评论 -
Lock 8锁问题
最初资源类题目/** * 题目:谈谈你对多线程锁的理解,8锁案例说明 * 口诀:线程 操作 资源类 * 8锁案例说明: * 1 标准访问有ab两个线程,请问先打印邮件还是短信 * 2 sendEmail方法中加入暂停3秒钟,请问先打印邮件还是短信 * 3 添加一个普通的hello方法,请问先打印邮件还是hello * 4 有两部手机,请问先打印邮件还是短信 * 5 有两个静态同步方法,有1部手机,请问先打印邮件还是短信 * 6 有两个静态同步方法,有2部手机,请问先打印邮原创 2022-06-22 16:57:45 · 252 阅读 · 0 评论 -
JUC 三大辅助类 CountDownLatch CyclicBarrier Semaphore
常用的构造方法有:CyclicBarrier(int parties,Runnable barrierAction)创建一个新的CyclicBarrier,它将在给定数量的参与者(线程)处于等待状态时启动,并在启动barrier时执行给定的屏障操作,该操作由最后一个进入barrier的线程操作常用的方法有:await() 在所有的参与者都已经在此barrier上调用await方法之前一直等待 具体常用的构造方法有:Semaphore(int permits)创建具有给定的许可数和非公平的公平设原创 2022-06-24 10:11:37 · 153 阅读 · 0 评论 -
java 异步编程 CompletableFuture
同步:就是在发出一个功能调用时,在没有得到结果之前,将一直处于等待中 即阻塞状态。也就是必须一件一件事做,等前一件做完了才能做下一件事异步:异步通常意味着非阻塞,可以使得我们的任务单独运行在与主线程分离的其他线程中,并且通过回调可以在主线程中得到异步任务的执行状态,是否完成,和是否异常等信息。 没有返回值的异步任务 有返回值的异步任务 thenAccept 消费处理结果, 接收任务的处理结果,并消费处理,无返回结果。 异常处理exceptionally 异常原创 2022-06-17 11:00:30 · 3842 阅读 · 0 评论 -
不推荐Executors创建线程池
线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 说明:Executors返回的线程池对象的弊端如下:1)FixedThreadPool和SingleThreadPool: 允许的请求队列长度为Integer.MAX_VALUE,可能会堆积大量的请求,从而导致OOM。2)CachedThreadPool: 允许的创建线程数量为Integer.MAX_VALUE,可能会创建大量的线程原创 2022-06-20 10:36:52 · 652 阅读 · 0 评论 -
线程中断机制 interrupt、isInterrupted、interrupted方法
①. 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,所以,Thread.stop、Thread.suspend、Thread. resume都已经被废弃了②. 在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的机制 — 中断③. 中断只是一种协作机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自己实现④. 若要中断一个线程,你需要手动调用该线程的interrupt方法,该方法也仅仅是将线程对象的中原创 2022-06-28 17:03:13 · 2196 阅读 · 2 评论 -
synchronized 源码分析
synchronized 源码分析原创 2022-06-27 10:52:52 · 203 阅读 · 0 评论 -
JMM 概念和原理 、三大特性 、 Happens-Before 先行发生原则
JMM 概念和原理原创 2022-06-29 17:44:34 · 338 阅读 · 0 评论 -
JAVA Volatile关键字 使用以及源码分析
①. 特点:可见性、有序性、不保证原子性②. volatile的内存语义1、当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值立即刷新回主内存中。2、当读一个volatile变量时,JMM会把该线程对应的本地内存设置为无效,直接从主内存中读取共享变量3、所以volatile的写内存语义是直接刷新到主内存中,读的内存语义是直接从主内存中读取volatile凭什么可以保证可见性和有序性有序性不存在数据依赖关系 可以重排序 存在数据依赖关系 禁止重排序①. 内存屏障(也称原创 2022-07-02 21:11:20 · 498 阅读 · 0 评论 -
AQS原理解析
转载文章地址视频原创 2022-06-15 15:16:58 · 108 阅读 · 0 评论
分享