JUC并发编程
文章平均质量分 83
keep one's resolveY
保持清醒!
展开
-
一文学会Java并发编程 Future、CompletableFuture
thenRun 也是对线程任务结果的一种消费函数,与thenAccept不同的是,thenRun 会在上一阶段 CompletableFuture 计算完成的时候执行一个Runnable,Runnable并不使用该 CompletableFuture 计算的结果。你可以把它看成一个计算流水线上的一个单元,并最终会产生一个最终结果,这意味着几个CompletionStage 可以串联起来,一个完成的阶段可以触发下一阶段的执行,接着触发下一次,再接着触发下一次,……从某种程度上说,这项能力是它的核心能力。转载 2024-01-31 15:25:11 · 131 阅读 · 0 评论 -
高并发下如何提高“锁”性能?
在项目中,尤其是电商或者做游戏开发的,高并发是必然的,但在高并发的环境下,大家会经常使用到锁。“锁” 是最常用的同步方法之一。但激烈的锁竞争会导致程序的性能下降,严重的甚至能导致 “死锁”的产生。这个时候,可能会有小伙伴会说,可以使用多线程啊。使用多线程的确可以明显地提高系统的性能。但事实上,使用多线程的方式会额外增加系统的开销。对于多线程应用来说, 系统除了处理功能需求外,还需要额外维护多线程环境的特有信息,如线程本身的元数据、线程的调度、线程上下文的切换等。转载 2023-10-08 17:37:27 · 117 阅读 · 0 评论 -
ThreadLocal 详解和分布式日志中traceId的实现
ThreadLocal类提供了一种线程局部变量(ThreadLocal),即每一个线程都会保存一份变量副本,每个线程都可以独立地修改自己的变量副本,而不会影响到其他线程,是一种线程隔离的思想。ThreadLocal虽然提供了一种解决多线程环境下成员变量的问题,但是它并不是解决多线程共享变量的问题。首先说明,ThreadLocal与。原创 2022-10-17 18:09:39 · 1120 阅读 · 0 评论 -
Java多线程:向线程传递参数的三种方法
然而,在有些应用中需要在线程运行的过程中动态地获取数据,如在下面代码的run方法中产生了3个随机数,然后通过Work类的process方法求这三个随机数的和,并通过Data类的value将结果返回。由于这种方法是在创建线程对象的同时传递数据的,因此,在线程运行之前这些数据就就已经到位了,这样就不会造成数据在线程运行后才传入的现象。在这个过程中最先要做的就是向线程中传递数据。在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果。..转载 2022-08-10 10:36:13 · 4041 阅读 · 0 评论 -
分布式锁Redisson详解(重点)
一、为什么需要分布式锁? 在单体web应用的时候,如果多个线程要访问共享资源的时候,我们通常线程间加锁的机制,在某一个时刻,只有一个线程可以对这个资源进行操作,其他线程需要等待锁的释放,Java中也有一些处理锁的机制,比如synchronized。 而到了分布式的环境中,当某个资源可以被多个系统访问使用到的时候,为了保证大家访问这个数据是一致性的,那么就要求再同一个时刻,只能被一个系统使用,这时候线程之间的锁机制就无法起到作用了,因为分布式环境中,系统是会部署到不同的机器上面的,那么就需要【转载 2021-12-25 23:10:39 · 5353 阅读 · 0 评论 -
Java线程池详解(+线程池多线程发邮件博客)
构造一个线程池为什么需要几个参数?如果避免线程池出现OOM?Runnable和Callable的区别是什么?本文将对这些问题一一解答,同时还将给出使用线程池的常见场景和代码片段。基础知识Executors创建线程池Java中创建线程池很简单,只需要调用Executors中相应的便捷方法即可,比如Executors.newFixedThreadPool(int nThreads),但是便捷不仅隐藏了复杂性,也为我们埋下了潜在的隐患(OOM,线程耗尽)。Executors创建线程池便捷方法列表:转载 2021-12-25 22:16:44 · 17131 阅读 · 0 评论 -
Java 并发包(JUC多线程)下面的工具类,在实际工作中都有哪些应用场景呢?
下面可以主要分几类:1. 线程间通信工具类,如Semaphore ,、CountDownLatch、Future等等,这种也经常用,特别是在写多线程高并发的程序时,结合通信工具和锁把线程编排的符合你的预期执行2. 锁,JUC提供了各种在某些场景下比synchronized更合适的高级锁实现,包括读写锁,互斥锁等等,因其多数基于CAS这种乐观锁实现,性能一般要由于synchronized内置锁,而且结合Cdondition更灵活可控。 不过个人觉得,这些锁除了jdk以及一些知名框架中使用外,我们日常工转载 2021-11-09 21:39:15 · 851 阅读 · 0 评论 -
Java 多线程学习笔记(狂神)
文章目录 1、线程简介 2、线程实现 2.1 继承 Thread 类,重写 run 方法 2.2 继承 Runnable 接口,创建 Tread 对象 2.3 实现 Callable 接口(了解) 2.4 Lamda 表达式 2.5 静态代理模式 3、线程的 5 种状态 3.1 线程的一些常用方法 3.1.1 线程休眠——sleep() 3.1.2 线程礼让——yield() 3.1.2 合并线程——Join() 3.2 停止....转载 2021-11-03 20:39:39 · 371 阅读 · 0 评论 -
Java多线程实现的四种方式
Java多线程实现的方式有四种: 1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target 3.通过Callable和FutureTask创建线程 4.通过线程池创建线程前面两种可以归结为一类:无返回值,原因很简单,通过重写run方法,run方式的返回值是void,所以没有办法返回结果后面两种可以归结成一类:有返回值,通过Callable接口,就要实现call方......转载 2021-03-25 23:25:18 · 198 阅读 · 0 评论 -
JUC多线程并发编程学习笔记(狂神)
目录JUC并发编程 1. 什么是JUC 2. 线程和进程 1)进程 2)线程 3)并发 4)并行 5)线程的状态 6)wait/sleep 3.Lock 1)传统的 synchronized 2)Lock 3. Synchronized 与Lock 的区别 4. 生产者和消费者的关系 1)Synchronzied 版本 2)存在问题(虚假唤醒) 3)Lock版 4)C原创 2021-10-29 00:35:39 · 325 阅读 · 0 评论