
java并发
文章平均质量分 57
上海第一深情Alan
精通java生态圈源码
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
精通并发【基础原理研究四】:CAS
使用sync会存在内核态和用户态的切换,使用CAS就没有。我对于这2种方式的理解:sync在竞争激烈的时候会选择把线程阻塞起来,不让其占用cpu。对于吞吐量来说是好事,但是执行效率不高,频繁的内核态和用户态切换。cas选择的是一种for循环,一直占用cpu,虽然提高了执行效率,但是竞争激烈的情况下,吞吐量受到影响。原创 2024-04-07 12:22:41 · 248 阅读 · 0 评论 -
精通并发【基础原理研究三】:Synchronized
这一篇文章是讲明白synchorized是如何解决。原创 2024-04-07 12:20:00 · 205 阅读 · 0 评论 -
精通并发【基础原理研究二】:Volatile
这篇文章主要是讲明白 Volatile是怎么保证。原创 2024-04-07 12:16:02 · 257 阅读 · 0 评论 -
精通并发【基础原理研究一】:Final
在多线程环境中,final 字段的写入操作在构造函数内完成,与此同时,JMM 会禁止构造函数内对 final 字段的写操作与随后对这些字段的读操作之间的重排序。因为编译器知道这些变量的值在运行时不会改变,它可以在编译时就将这些变量的引用替换为实际的值,这样可以减少运行时的开销。总的来说,final 关键字在 Java 中不仅是一个语言特性,它还与 Java 的内存模型紧密相关,提供了不变性保证和优化的可能性,是 Java 高效编程和多线程编程的重要工具。这一点在设计不可变对象时需要特别注意。原创 2024-04-07 12:12:08 · 365 阅读 · 0 评论 -
精通并发【基础四】:创建线程的几种方式
在 Java 中,多线程编程是一种常见且强大的编程范式,它允许程序同时执行多个任务。创建线程是多线程编程的基础,Java 提供了几种不同的方法来创建和启动线程。本文将介绍三种常用的创建线程的方法:继承 Thread 类、实现 Runnable 接口和实现 Callable 接口。原创 2024-04-03 22:13:14 · 437 阅读 · 0 评论 -
精通并发【基础三】:线程安全有哪些思路
在多线程编程中,线程安全是指当多个线程访问某个类时,这个类始终能表现出正确的行为。实现线程安全可以通过多种方式,每种方式都有其适用场景。本文将探讨四种实现线程安全的思路:不可变性(final)、无锁编程、ThreadLocal 和互斥机制。在多线程编程中,线程安全是指当多个线程访问某个类时,这个类始终能表现出正确的行为。实现线程安全可以通过多种方式,每种方式都有其适用场景。本文将探讨四种实现线程安全的思路:不可变性(final)、无锁编程、ThreadLocal 和互斥机制。原创 2024-04-03 21:54:47 · 641 阅读 · 1 评论 -
精通并发【基础二】:java是如何解决并发问题
并发编程一直是软件开发中的一个挑战性领域,Java 作为一门成熟的编程语言,在并发处理方面提供了丰富的机制和工具。本文旨在探讨 Java 是如何解决并发问题的,特别是通过 Java 内存模型(JMM)以及提供的关键字如 final、synchronized 和 volatile。原创 2024-04-03 21:48:08 · 762 阅读 · 0 评论 -
精通并发【同步三】:Condition条件队列
【代码】Java并发之同步三:Condition条件队列。原创 2024-01-11 23:21:27 · 442 阅读 · 0 评论 -
精通并发【同步二】:Java并发工具类
countdownlatch 底层原理,定义锁资源:0,当资源为0才叫拿到锁,所以countdownlatch也叫做倒数器,拿锁的时候判断是不是0,不是就park,然后countdown的时候,会- state的时,当state的值为1的时候,park的现场就会醒过来在我的理解下,CountDownLatch可以理解为就是一个同步器,让谁先做,谁后做(或者说让哪些人先做,那些人后做)两种情况:(原创 2024-01-11 23:17:35 · 420 阅读 · 0 评论 -
精通并发【同步一】:管程里面的waitSet
todo。原创 2024-01-11 23:15:18 · 379 阅读 · 0 评论 -
精通并发【互斥二】:ReentrantLock(基于公平锁)
shouldParkAfterFailedAcquire 这个方法确保前面的节点状态一定是-1,不管是跨过前面>0的,还是说先把前置节点设置成-1,当这一次return false再进来的时候,会看前置节点是不是-1,然后return true退出。上面parkAndCheckInterrput方法在接受到中断信号的时候, 会抛出InterruptedException,然后跳出方法,最终执行cancelAcquire方法。所以最终我们又需要看到AQS这个类中,AQS是一个抽象的队列同步器。原创 2024-01-11 23:12:28 · 959 阅读 · 0 评论 -
精通并发【互斥一】:管程
1、简单聊聊什么是管程模型(共享资源):定义一个共享变量,可以理解锁,令牌这类的东西(互斥访问共享资源):获取这个锁、令牌的时候是排好队的,只允许单线程访问(线程之间的同步过程):当 单线程在处理的时候,不满足某些条件需要阻塞的时候,可以调用方法阻塞起来,但是在条件满足的时候,也需要被人唤醒。被人唤醒之后,不是从阻塞处直接往下执行的,它是重新回到互斥的地方重新获取锁,重新执行。所以当真正执行的时候,当初唤醒它的条件可能又不满足了。原创 2024-01-11 23:09:06 · 570 阅读 · 0 评论 -
精通并发【基础一】:多线程不安全的本质
这些年,我们的cpu、内存和i/o设备都在不断迭代,不断朝着更快的方向努力。但是,在这个快速发展的过程中,有一个。原创 2024-01-11 23:05:29 · 1015 阅读 · 0 评论 -
精通并发【基础六】:线程基础
调用Thread.sleep方法会使得线程进入限期等待状态,常常用“使一个线程睡眠”描述调用object.wait(xxx) 方法使得线程进入限期等待,常常用“挂起一个线程”描述睡眠和挂起是一个动作,阻塞和等待是一个状态阻塞和等待的区别在于,阻塞是一个被动的,它是在等待一个排它锁;原创 2024-01-11 22:58:01 · 1014 阅读 · 0 评论 -
精通并发【第一篇】【全景图】:全网最好的并发全景图构建
式(Monitor原理),但是只用锁,协调的费力度太高,在并发的世界里面,又有了一些其它的更抽象的工具:闭锁、屏障、队列以及其它的一些并发容器等;再然后,大的任务被拆解多个小的子任务,小的子任务被各自执行,不难想象,子任务之间肯定存在着依赖关系,所以需要协调,那如何协调呢?稍微了解过并发领域知识的人都知道,里面的知识点、概念多而散:线程安全、锁、同步、异步、阻塞、非阻塞、死锁、队列(为什么并发要跟队列扯上关系)、闭锁、信号量、活锁等等。如果单个去学这些知识点,单个去练习,如果没有 「主线」,后期很容易忘。原创 2024-01-11 22:55:05 · 466 阅读 · 0 评论 -
精通并发【基础原理研究五】:AQS
队列同步器AbstractQueueSynchronized(以下简称AQS),是用来构建锁或者其他同步组件的基础框架,它使用一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作,并发包的作者期望它能够成为实现大部分同步需求的基础。AQS长什么样?成员属性head:指向阻塞队列的头节点tail:指向阻塞队列的尾节点state:非常重要的东西,用它来做并发控制,相当于信号量,不同state的使用方式可以用作不同的锁,可以排他锁(Ree原创 2020-09-05 10:55:09 · 268 阅读 · 1 评论 -
精通并发【基础原理研究六】:as-if-serial & happen-before
As-if-serial 语义和 Happens-before 关系是 Java 并发编程中的两个重要概念。As-if-serial 语义确保了单线程程序的行为就如同代码按顺序执行一样,而 Happens-before 关系提供了一种在多线程环境中推理内存操作顺序的逻辑基础。理解这些概念有助于编写正确、高效的并发程序。原创 2020-09-02 23:59:48 · 581 阅读 · 1 评论 -
精通并发【基础原理研究七】:Java内存模型
GF原创 2020-09-01 22:50:26 · 261 阅读 · 1 评论