随笔分类 - JAVA / 并发
摘要:之前写过一些多线程或者JUC的文章,最近再看并发相关的内容,又有了一些新的理解,做一个补充。 一、Thread 1、Thread和Runable 验证守护线程:如果主线程不休眠,则不会等task中的内容输出,直接停止主线程 public class DaemonThread { public sta
阅读全文
摘要:一、JAVA中的线程池 线程池的实现原理及流程如下图所示: 如上图所示,当一个线程提交到线程池时(execute()或submit()),先判断核心线程数(corePoolSize)是否已满,如果未满,则直接创建线程执行任务;如果已满,则判断队列(BlockingQueue)是否已满,如果未满,则将
阅读全文
摘要:1、等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作。 使用join也可以完成这个操作,代码示例如下: package com.example2.demo2.controller; import lombok.extern.slf4j.
阅读全文
摘要:一、ConcurrentHashMap的实现原理与使用 1、为什么要使用ConsurrentHashMap 两个原因,hashMap线程不安全(多线程并发put时,可能造成Entry链表变成环形数据结构,Entry的next节点永不为空,就会产生死循环获取Entry),hashTable效率低(Ha
阅读全文
摘要:1、Lock接口 Lock与Synchronized实现效果一致,通过获得锁、释放锁等操作来控制多个线程访问共享资源,但是Synchronized将获取锁固话,必须先获得锁,再执行,因此两者对比来说,Synchronized更方便,不需要关注加锁解锁操作;而Lock更灵活,提供了可操作、可中断等特性
阅读全文
摘要:一、线程简介 1、线程状态 线程在其生命周期内的所有状态如下表所示: 线程状态 状态说明 NEW 初始状态,线程被构建,但还没有调用start()方法 RUNABLE 运行状态,JAVA线程将操作系统中的就绪和运行两种状态笼统的称作“运行中”,即调用run()方法前后,统一都叫运行中 BLOCKED
阅读全文
摘要:一、什么是JMM (一)JMM定义 JMM 规范对应的是“[JSR-133. JavaMemory Model and ThreadSpecification]”,《Java 语言规范》的 [$17.4. Memory Model章节] JMM 规范明确定义了不同的线程之间,通过哪些方式,在什么时候
阅读全文
摘要:一、并发编程的挑战 并发编程的挑战 多线程程序不一定运行的比单线程快: (1)上下文切换 任务从保存到再加载的过程就是一次上下文切换; 减少上下文切换的方法:无锁并发编程、CAS算法、使用最少线程和使用协程。 a、无锁并发编程:多线程会竞争锁会引起上下文切换,因此使用无锁并发编程,可以避免上下文切换
阅读全文