并发编程
文章平均质量分 72
香气袭人知骤暖
但行好事,莫问前程
展开
-
Java线程中断
interrupt()方法用于中断一个线程,而Java中线程的处理是协作式的而不是抢占式的。所谓协作式的意思是:实际上调用一个线程的interrupt() 方法中断一个线程,并不是强行关闭这个线程,只是跟这个线程打个招呼,将线程的中断标志位置为true,线程是否中断,由线程本身决定。Java中断响应是描述当一个线程处于运行、阻塞或死锁状态时,外界能让该线程抛出InterruptedException异常并提前返回,就叫可中断响应方法或线程,如果不会抛出InterruptedException,就叫不可中断原创 2022-05-21 18:38:45 · 1040 阅读 · 0 评论 -
ThreadLocal源码分析
1.ThreadLocal简介ThreadLocal本地线程变量,线程自带的变量副本(实现了每一个线程副本都有一个专属的本地变量,主要解决的就是让每一个线程绑定自己的值,自己用自己的,不跟别人争抢。通过使用get()和set()方法,获取默认值或将其值更改为当前线程所存的副本的值从而避免了线程安全的问题)ThreadLocal实现主要涉及Thread,ThreadLocal,ThreadLocalMap这三个类。Thread中关于ThreadLocalMap部分的相关声明:/* ThreadLoca原创 2022-05-11 13:26:05 · 107 阅读 · 0 评论 -
Java8 parallelStream流--线程数的控制
Java 8 并行流(parallel stream)采用共享线程池,对性能造成了严重影响。底层使用通用的 fork/join 池来实现,该池是所有并行流共享的。默认情况,fork/join 池会为每个处理器分配一个线程。public static void main(String[] args) throws Exception { List<String> list = Arrays.asList("1", "2", "3", "4", "5"); //原创 2022-05-01 22:26:12 · 8034 阅读 · 0 评论 -
Synchronized原理分析
对象在内存中的布局synchronized实现的锁是存储在Java对象头里,什么是对象头呢?在Hotspot虚拟机中,对象在内存中的存储布局,可以分为三个区域:对象头(Header)、实例数据(Instance Data)、对齐填充(Padding)Mark word记录了对象和锁有关的信息,当某个对象被synchronized关键字当成同步锁时,那么围绕这个锁的一系列操作都和Mark word有关系。Mark Word在32位虚拟机的长度是32bit、在64位虚拟机的长度是64bit。锁的升级原创 2022-03-08 14:12:40 · 101 阅读 · 0 评论 -
深入分析AQS实现原理(基于ReentrantLock的源码剖析)
(一)、AQS概述AbstractQueuedSynchronizer简称AQS,它是java.util.concurrent包中,它提供了一套完整的同步编程框架。我们常用的ReentrantLock、CountDownLatch都是基于AQS实现的。AQS的实现分为两种形式,一种是独占锁,另一种则是共享锁。独占锁:每次只能有一个线程持有锁。我们比较熟悉的ReentrantLock就是通过独占锁实现互斥性的。共享锁:允许多个线程同时获取锁,并发地访问资源。例如ReentrantReadWriteLo原创 2022-03-06 23:59:06 · 522 阅读 · 0 评论