![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
多线程
文章平均质量分 93
多线程开发、进程同步、线程池等
Van-bo
Get busy living or get busy dying
展开
-
volatile关键字详解
volatile是一个轻量级的synchronized,一般作用于变量,在多线程开发中保证了内存的可见性。相比于synchronized关键字,volatile关键字的执行成本更低,效率更高。原创 2022-09-05 19:16:25 · 455 阅读 · 2 评论 -
关键字synchronized与volatile详解
在多线程并发编程中synchronized和volatile都扮演着重要的角色,synchronized一直是元老级角色,很多人都会称呼它为重量级锁。但是,随着Java SE 1.6对synchronized进行了各种优化之后,有些情况下它就并不那么重了。而volatile是轻量级的 synchronized,它在多处理器开发中保证了共享变量的“可见性”。原创 2021-02-14 13:24:27 · 10932 阅读 · 0 评论 -
线程基础与使用测试
一、进程和线程进程指的一段正在运行的程序。一个程序运行中可以执行多个任务,任务称之为线程。每个进程有自己独立的地址空间,多并发请求,为每一个请求创建一个进程 导致系统开销、用户请求效率低,因此出现了进程这个概念,Java中的JVM是一个进程。区别:进程是程序执行过程中资源分配和管理的基本单位,线程是cpu执行的额最小单位 。 进程拥有自己的独立的地址空间,每启动一个进程,系统就会分配地址空间 进程可以拥有多个线程,各个线程之间共享程序的内存空间 。 每个进程拥有自己独有的数据,线程.原创 2021-01-29 22:03:09 · 146 阅读 · 1 评论 -
悲观锁与乐观锁详解
悲观锁悲观锁顾名思义是从悲观的角度去思考问题,解决问题。它总是会假设当前情况是最坏的情况,在每次去拿数据的时候,都会认为数据会被别人改变,因此在每次进行拿数据操作的时候都会加锁,如此一来,如果此时有别人也来拿这个数据的时候就会阻塞知道它拿到锁。在Java中,Synchronized和ReentrantLock等独占锁的实现机制就是基于悲观锁思想。在数据库中也经常用到这种锁机制,如行锁,表锁,读写锁等,都是在操作之前先上锁,保证共享资源只能给一个操作(一个线程)使用。由于悲观锁的频繁加锁,因此导致了一原创 2021-05-28 20:21:37 · 11180 阅读 · 1 评论 -
HashMap的使用与底层结构剖析
1.What is Map?首先说明几个概念:ColllectionColllection接口为基本的接口,存储对象有List、Set、Quene。List为有序的允许重复的Collection,Set为无序不允许重复的Collection。 哈希表 哈希表也称散列表,根据关键码值key 进行访问的数据结构,也就是说,能够将关键码 映射到表中一个位置我们就可以去访问其记录value,加快查找的速度,这个映射函数 叫做散列函数,存放记录的数组叫做散列表 数组:寻址容易O(1)原创 2021-01-22 21:06:01 · 10868 阅读 · 0 评论 -
线程生命周期及常用方法的使用
一、守护线程守护线程是什么?守护线程是一类比较特殊的线程,一般用于处理后台的工作,比如JDK的垃圾回收线程。守护线程的作用?JVM(Java Virtual Machine)java虚拟机在正常情况下退出如下:那么JVM何时会退出呢?官方的说明:The java virtual machine exits when the only thread running are all daemon thread.当运行的线程都是守护进程线程时,java虚拟机退出。如果还有其他的任意一个用.原创 2021-02-01 15:22:55 · 284 阅读 · 0 评论 -
ConcurrentHashMap优点与源码剖析
HashMap非线程安全,在多线程并发的情况下add/get可能引入死循环,导致cpu利用率趋近于100%解决方案有HashTable或者Collections.synchronizedMap(map)这两个解决方案底层对读写方法进行加锁此外还有一种结构:ConcurrentHashMap也是线程安全的原创 2021-03-06 16:52:35 · 3144 阅读 · 0 评论 -
生产者消费者模型分析与实现
生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。首先定义BlockingQueue类,这个类就相当于仓库,用队列来存储数据。 //存取数据 private final LinkedL..原创 2021-03-06 14:25:12 · 193 阅读 · 0 评论 -
Lock锁和ReentrantLock锁
Lock实现提供了比使用Synchronized方法和语句更广泛的搜定操作,此操作允许更灵活的结构,可以具有很大的属性,可以支持多个相关的Condition对象。原创 2021-06-03 17:04:30 · 12062 阅读 · 5 评论 -
SpringBoot2常见问题总结帖
1. 启动Springboot主程序类后报错This application has no explicit mapping for /error, so you are seeing this as a fallback.解决办法:MainApplication位置放错了,需要放在最外面,放在某一个包如controller中就会报错,同时检查自己的注解是否写错,@SpringBootApplication。...原创 2022-04-07 16:24:50 · 525 阅读 · 0 评论 -
ThreadPoolExecutor任务提交与停止流程及底层实现
ThreadPoolExecutor底层源码剖析,执行过程、停止过程中所涉及的函数执行过程,如excutor、线程池、Worker、task、shutdown等原创 2022-03-09 20:33:06 · 10420 阅读 · 4 评论 -
AQS、Semaphore、CountDownLatch与CyclicBarrier原理及使用方法
AQSAQS 的全称为AbstractQueuedSynchronizer,翻译过来的意思就是抽象队列同步器。这个类在java.util.concurrent.locks包下面,AQS 就是一个抽象类,继承了AbstractOwnableSynchronizer ,主要用来构建锁和同步器,方法定义如下:public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements...原创 2021-11-04 11:54:17 · 1089 阅读 · 0 评论