![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 93
多线程并发技术
程序猿转行摆摊
如果改变不了世界,那就只能改变自己。
展开
-
JVM性能优化之初识JVM
我们知道JAVA程序是跨平台的,可以一次编译到处运行,编译完成之后不管是windows、Linux还是Mac都可以直接运行,JVM就在这里起到了重要的作用。原创 2022-02-22 21:41:18 · 603 阅读 · 0 评论 -
深入理解并发编程之手写消息中间件实战
大多数人应该都知道MQ,消息中间件都有生产者、队列和消费者,如下图我们就使用线程手写一个类似于消息队列来加深对并发编程的理解。原创 2022-02-22 20:22:48 · 678 阅读 · 0 评论 -
深入理解并发编程之ThreadLocal原理分析
ThreadLocal提供了线程本地变量,它可以保证访问到的变量属于当前线程,每个线程都保存有一个变量副本,每个线程的变量都不同。ThreadLocal相当于提供了一种线程隔离,将变量与线程相绑定。简单的说就是ThreadLocal为多个线程提供了互不干扰的本地变量。原创 2022-02-20 22:05:18 · 321 阅读 · 0 评论 -
深入理解并发编程之线程池Fork Join
Fork Join是Java7提供的并行执行任务的框架,是一个把大任务分割成若干小任务,小任务可以继续不断拆分n多个小任务,最终汇总小任务的结果得到大任务结果的框架。原创 2022-02-17 22:06:14 · 466 阅读 · 1 评论 -
深入理解并发编程之线程池FutureTask
我们在学习线程的创建方式的时候就有一种方式是实现Callable接口的方法,提供的call()方法可以返回结果,想要获取到执行结果这就是FutureTask的使用。原创 2022-02-17 20:33:21 · 1118 阅读 · 0 评论 -
深入理解并发编程之线程池ThreadPoolExecutor源码分析
因为频繁的开启线程或者停止,线程需要从新被cpu从就绪到运行状态调度,效率非常低,所以使用线程可以实现复用,从而提高效率。原创 2022-02-16 22:51:58 · 408 阅读 · 0 评论 -
深入理解并发编程之CountDownLatch底层实现原理
CountDownLatch的底层是基于AQS实现的,提供了一传int类型的构造方法new CountDownLatch(int count),表示计数器计数器的初始值为count,还有两个核心方法:countDown() 方法表示计数器的数字执行减1操作;await()方法表示让当前线程进入等待状态直到count的值为0才能继续执行;以及一个继承于AQS的内部类Sync来做具体的操作。原创 2022-02-15 21:40:17 · 876 阅读 · 0 评论 -
深入理解并发编程之Condition源码解读分析
Condition是一个接口,其提供的就两个核心方法,await()和signal()方法,相当于Object的wait和notify方法,执行await()方法进入等待状态的线程会放在Condition的单项队列中。注意等待和唤醒方法都需要在锁的代码块之间才能执行。原创 2022-02-14 22:22:06 · 346 阅读 · 0 评论 -
深入理解并发编程之AQS源码解读
CLH(Craig, Landin, and Hagersten locks) 同步队列 是一个FIFO双向队列,其内部通过节点head和tail记录队首和队尾元素,队列元素的类型为Node。AQS依赖它来完成同步状态state的管理原创 2022-02-11 23:39:46 · 600 阅读 · 0 评论 -
深入理解并发编程之Lock源码分析
Java中我们常用的锁就是Synchronized关键字和Lock锁,Synchronized是由C++写的,我们在前面已经分析了,Lock锁是使用Java代码写的我们可以直接点击进去看代码分析。我们根据源码简单写个Lock锁来分析下Lock锁原理。原创 2022-02-10 22:26:04 · 553 阅读 · 1 评论 -
深入理解并发编程之偏向锁轻量锁重量锁原理分析
偏向锁: 同步代码块一直都是同一个线程获取锁。 轻量级锁:多个线程在间隔的形式获取锁,没有同时在竞争锁。 重量级锁:多个线程同时在竞争同一把锁。原创 2022-02-09 22:42:23 · 668 阅读 · 1 评论 -
深入理解并发编程之synchronized的monitor与对象布局原理
Synchronized是Java的关键字,是重量级锁,可以用在方法和代码块上。如果在普通方法上加上Synchronized锁,则使用this锁; 在静态同步方法上,则使用当前类的class字节码;也可以自定义锁的对象。Synchronized底层是使用C++ 写的。原创 2022-02-08 22:16:06 · 849 阅读 · 0 评论 -
深入理解并发编程之锁的分类
锁是为了保障多线程在同时操作一组资源时的数据一致性,当多个线程在同时共享到同一变量的时候,可能会收到其他线程的干扰,给资源加上锁之后,只有拥有此锁的线程才能操作此资源,而其他线程只能排队等待使用此锁。我们根据不同的评判标准可以把锁分为很多种类。原创 2022-02-07 22:23:37 · 1216 阅读 · 2 评论 -
深入理解并发编程之CAS无锁机制与ABA问题
传统的像synchronized锁采用的是悲观锁,在没有获取到锁的情况下会使当前线程进入阻塞状态,释放CPU执行权,效率非常低,所以提出了乐观锁,例如CAS(自旋)无锁机制。原创 2022-02-07 21:52:22 · 545 阅读 · 0 评论 -
深入理解并发编程之volatile伪共享与Volatile重排序问题
被volatile关键字修饰的变量会存在一个“lock”的前缀,Lock前缀,Lock不是一种内存屏障,但是它能完成类似内存屏障的功能。Lock会对CPU总线和高速缓存加锁,可以理解为CPU指令级的一种锁。类似于Lock指令。在具体的执行上,它先对总线和缓存加锁,然后执行后面的指令,在Lock锁住总线的时候,其他CPU的读写请求都会被阻塞,直到锁释放。最后释放锁后会把高速缓存中的数据全部刷新回主内存,且这个写回内存的操作会使在其他CPU里缓存了该地址的数据无效。原创 2022-01-26 21:53:16 · 317 阅读 · 0 评论 -
深入理解并发编程之volatile与JMM内存模型
Java内存模型(Java Memory Model,JMM)用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。原创 2022-01-25 23:04:59 · 328 阅读 · 0 评论 -
深入理解并发编程之线程之间的通讯
线程间的通信是使线程间能够互相发送信号。当多个线程在处理同一个资源,并且**任务不同时(正常情况下多线程执行是同时处理的,但是我们期望的是不同时)**,需要线程通信来帮助解决线程之间对同一个变量的使用或操作。只要线程不是同时操作共享变量就不会发生线程安全问题。原创 2022-01-25 20:00:00 · 439 阅读 · 0 评论 -
深入理解并发编程之线程安全
线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。原创 2022-01-23 19:50:00 · 2387 阅读 · 0 评论 -
深入理解并发编程之多线程入门
多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理” 。原创 2022-01-22 21:27:10 · 395 阅读 · 0 评论