
Java并发编程
文章平均质量分 85
Java并发编程相关
master-dragon
weixin:dwl_1270530306
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java并发编程知识点
java并发编程的知识目录原创 2025-01-21 21:03:12 · 221 阅读 · 0 评论 -
协程coroutine认识和例子代码
它用极其创新的方式证明了在 JVM 上实现协程是可行的,并展示了其巨大价值。因此,在今天,对于新的项目,我们应该直接使用。一个程序可以包含多个协程,可以对比与一个进程包含多个线程,因而下面我们来比较协程和线程。而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。既然 JVM 本身(在 Loom 之前)不支持保存和恢复线程的执行状态,Quasar 是如何做到的呢?是在单线程中的多个任务同时执行的相互配合,避免了线程之间切换造成的资源浪费。原创 2025-08-02 19:11:31 · 657 阅读 · 0 评论 -
Java CompletableFuture实现任务调度Dag
需要实现 a、e 一起跑,然后 b、c跑, 最后是d跑。如上整个任务完成需要8秒多。原创 2025-07-21 20:21:52 · 217 阅读 · 0 评论 -
多个线程执行,如何取到最先完成的任务的那个结果
实际工作中,可能有些链路逻辑有对比需求,或者多种方案,需要取最快执行的那个方案,肯定是多线程并行跑,取最快的那个。线程安全的阻塞添加和获取(可以看到较慢的线程不加任何处理还是执行完的)原创 2025-06-14 12:44:06 · 441 阅读 · 0 评论 -
AtomicInteger原子变量和例题
【代码】AtomicInteger原子变量和例题。原创 2025-06-01 08:49:40 · 234 阅读 · 0 评论 -
ConcurrentHashMap线程安全:分段锁 到 synchronized + CAS
专栏系列文章地址:https://blog.youkuaiyun.com/qq_26437925/article/details/145290162本文目标:百度AI介绍如下:在 JDK7 中,ConcurrentHashMap 使用“分段锁”机制实现线程安全,数据结构可以看成是”Segment数组+HashEntry数组+链表”,一个 ConcurrentHashMap 实例中包含若干个 Segment 实例组成的数组,每个 Segment 实例又包含由若干个桶,每个桶中都是由若干个 HashEntry 对象链接起原创 2025-02-04 21:26:05 · 494 阅读 · 0 评论 -
Java死锁问题
工作中基本很少遇到死锁问题,不过遇到了能jstack发现,参照避免死锁的方法。原创 2025-02-02 20:16:22 · 860 阅读 · 0 评论 -
流处理 & CompletableFuture
具有一定的优势,因为它允许你对执行器(Executor)进行配置,尤其是线程池的大小,让它以更适合应用需求的方式进行配置,满足程序的要求,而这是并行流API无法提供的。对于计算密集型操作,并且没有I/O,那么推荐使用Stream接口,因为实现简单,同时效率也是最高的(如果所有的线程都是计算密集型的),那就没有必要创建比处理器和数更多的线程。反问:创建一个配有线程池的执行器,线程池中线程的数目取决于你预计你的应用需要处理的负荷,但是你该如何选择合适的线程数目呢?可以查询之后,后续获取,而期间可以干别的事情。原创 2025-02-02 12:58:28 · 1047 阅读 · 0 评论 -
Immutable设计 & SimpleDateFormat & DateTimeFormatter
value,offset和count这三个变量都是private的,并且没有提供setValue, setOffset和setCount等公共方法来修改这些值,所以在String类的外部无法修改String为了实现字符串池字符串池的实现可以在运行时节约很多heap空间,因为不同的字符串变量都指向池中的同一个字符串。但如果字符串是可变的,那么String intern将不能实现,因为这样的话,如果变量改变了它的值,那么其它指向这个值的变量的值也会一起改变为了安全 & 线程安全。原创 2025-02-02 10:36:05 · 1078 阅读 · 0 评论 -
work-stealing算法 & ForkJoinPool
work-stealing算法是一种用于多线程并行计算中的任务调度算法。该算法的核心思想是允许空闲的线程从其他忙碌线程的工作队列中“窃取”任务来执行,以提高整体的资源利用率和系统的吞吐量。在work-stealing算法中,每个线程通常都维护一个自己的任务队列,用于存储需要执行的任务。当某个线程完成自己的任务队列中的所有任务后,它会尝试从其他线程的任务队列中窃取任务。为了防止多个线程同时窃取同一个线程的任务,通常需要使用一些同步机制,如锁或原子操作等。原创 2025-02-02 09:43:19 · 1270 阅读 · 0 评论 -
java ThreadLocal原理和使用
假如threadLocal1不用了,要回收ThreadLocal对象,而如果map强引用这个ThreadLocal对象,将导致这个ThreadLocal对象回收不了。当ThreadLocalMap里面的key被回收,这使得value就访问不到,也需要回收;但是value的引用是存在的,这就会导致内存泄漏。比如一个查询,要经过一层一层处理,最后还要记录此次的查询记录;弱引用做了一道工作,但是仍需要显示的remove掉ThreadLocal的value。并不是一个线程,而是线程的一个局部变量(属于线程)原创 2025-02-02 00:46:58 · 838 阅读 · 0 评论 -
线程池中某个线程执行有异常,该如何处理?
java 线程池异常处理原创 2022-10-22 16:58:23 · 3201 阅读 · 0 评论 -
Java线程池
java线程池原创 2025-02-01 21:05:52 · 1248 阅读 · 0 评论 -
Java LongAdder & 分段锁思想
当多个线程并发地对LongAdder进行累加操作时,不同的线程可能会被分配到不同的Cell上进行操作,只有当多个线程同时访问同一个Cell时才需要进行同步操作。这种设计大大降低了锁的竞争程度,提高了并发性能。的机制来实现高效的并发累加。它将对一个变量的累加操作分散到多个Cell中,每个Cell维护一个独立的long值。已经初始化但是冲突发生在Cell单元内,则也调用父类的longAccumelate,此时可能就需要对。数组未初始化,会调用父类的longAccumelate去初始化。,从而提高并发性能。原创 2025-02-01 13:47:06 · 999 阅读 · 0 评论 -
Java Semaphore使用例子和流程
CAS操作消耗一个信号量;如果没有信号量可消耗了,就死循环等待了。release增加信号量;acquire减少信号量。semaphore.acquire()的反向操作。输入如下:可以看到同时最多只有2个线程能得到执行。原创 2023-09-19 22:52:44 · 344 阅读 · 0 评论 -
java CountDownLatch和CyclicBarrier
另外工作中用到CountDownLatch的地方还很多,一般是完成某些事情才能继续某项操作。原创 2025-02-01 10:32:13 · 851 阅读 · 0 评论 -
Java ReentrantLock锁源码走读和对比synchronized
Java ReentrantLock锁源码原创 2023-09-16 17:09:11 · 293 阅读 · 0 评论 -
Java锁自定义实现到aqs的理解
线程基础和cas操作知晓后,可以开始自己实现锁了。例子代码实现多线程的count++// 引用Unsafe需使用如下反射方式,否则会抛出异常java.lang.SecurityException: Unsafe public Unsafe reflectGetUnsafe() throws NoSuchFieldException , IllegalAccessException {原创 2025-01-31 22:24:05 · 929 阅读 · 0 评论 -
Java CAS操作
通过前面的学习认识到了CPU缓存,Java内存模型,以及线程安全的原子、可见、顺序三大特性。本文则重点认识CAS操作,这是Java并发编程常见的一个操作,AbstractQueuedSynchronizer基于此操作提供了丰富的同步器和各种锁。原创 2025-01-30 21:31:06 · 885 阅读 · 0 评论 -
Java synchronized关键字和锁分类
仍然是对象锁,先获取到锁的先执行。目前是JVM自适应自旋的升级。两部手机,一个发短信,一个发邮件,先打印邮件还是短信?static方法用的是class对象锁,所以是有竞争关系的,先先获取到锁谁先执行,sleep不影响锁逻辑。重量级锁:操作系统层面,有竞争队列,等待队列(wait_set),不需要消耗CPU,后续操作系统调度。这种自不必说,一个有锁一个无锁,无竞争关系,谁先执行到打印谁。静态方法用class对象的对象锁,普通方法用对象实例的对象锁。不同对象实例,各种的对象锁,所以a,b线程没有竞争关系。原创 2025-02-01 12:10:08 · 1280 阅读 · 0 评论 -
Java线程认识和Object的一些方法&ObjectMonitor
本文主要对Java线程有一个大概了解,认识到里面的一些方法和Object对象方法的区别。认识到对象Monitor,这有助于对于后面的Synchronized和锁的认识。同时完成一道经典的多线程题目:实现ABC循环输出。原创 2025-01-30 22:32:20 · 1793 阅读 · 0 评论 -
Java内存模型 & volatile & 线程安全
可以与前面说的物理机的主内存相比,只不过物理机的主内存是整个机器的内存,而虚拟机的主内存是虚拟机内存中的一部分。线程的工作内存保存了线程需要的变量在主内存中的副本。use:作用于工作内存的变量,它把工作内存中一个变量的值传递给执行引擎,每当虚拟机遇到一个需要使用到变量的值的字节码指令时将会执行这个操作。store: 作用于工作内存的变量,它把工作内存中的一个变量的值传送到主内存中,以便随后的write操作使用。write:作用于主内存的变量,它把store操作从工作内存中得到的变量的值放入主内存的变量中。原创 2025-01-30 21:12:03 · 907 阅读 · 0 评论 -
CPU & 缓存基础知识
并发编程首先需要简单了解下现代CPU相关知识。通过一些简单的图,简单的代码,来认识CPU以及一些常见的问题。原创 2025-01-22 15:29:48 · 1370 阅读 · 0 评论