
Java并发编程
文章平均质量分 97
echola_mendes
一个后端程序猿,旨在让所有的技术简单化……
展开
-
Java并发编程(一)—Java内存模型以及线程安全
线程安全:在多线程环境下,多个线程可以安全地访问和操作共享数据,而不会引发数据不一致或程序错误的问题JMM 解决并发程序中最关键的两个问题:线程间的可见性和指令重排序。线程间的可见性:确保当一个线程修改了共享变量的值时,其他线程可以立即看到这一改变。没有良好的可见性保证,一个线程对共享变量的修改可能对其他线程不可见,导致数据不一致。指令重排序:为了提高性能,编译器和处理器常常会改变指令的执行顺序(只要这种改变不影响单线程内的程序逻辑)。然而,在多线程环境下,这种重排序可能导致严重问题。原创 2024-07-31 18:17:49 · 1115 阅读 · 0 评论 -
Java并发编程(二)—volatile关键字的作用及使用场景
volatile在这篇文章多次提及volatile,这是一个非常重要的概念,主要用于多线程编程中,它确保了变量的可见性和禁止指令重排序,但不保证原子性,下面详细解释。原创 2024-08-01 18:33:38 · 1232 阅读 · 0 评论 -
Java并发编程(三)—CAS的原理及应用场景
CAS通过比较并交换的方式来更新共享变量,避免了使用传统锁机制带来的性能开销,但在高并发场景下可能会遇到自旋消耗CPU资源和ABA问题等。原创 2024-08-02 16:13:37 · 2007 阅读 · 0 评论 -
Java并发编程(四)—synchronized关键字的应用
synchronized 关键字是 Java 中用来确保线程安全的基本机制,特别是在需要保证多个变量之间的一致性时。通过使用 synchronized,可以锁定一个对象,从而确保同一时刻只有一个线程可以访问该对象可以将 synchronized 用于方法级别和代码块级别,要注意锁定的对象应该是一个合适的对象,不能是一个常量,使用 synchronized 可以简化并发控制逻辑,但需要注意其性能开销和潜在的死锁风险。原创 2024-08-05 16:28:54 · 1725 阅读 · 0 评论 -
Java并发编程(五)—ReetrantLock详解及应用
synchronized:适用于大多数基本的同步需求,提供了简洁的语法,自动释放锁,适合于简单的同步场景。ReentrantLock:适用于需要更高级特性的场景,如公平锁、超时等待等,需要显式管理锁的获取和释放。如果竞争比较激烈,推荐ReentrantLock去实现,不存在锁升级概念。而synchronized是存在锁升级概念的,如果升级到重量级锁,是不存在锁降级的。原创 2024-08-07 16:00:21 · 1945 阅读 · 0 评论 -
Java并发编程(六)—线程池的使用
线程池其实是一种池化的技术的实现,实现资源的一个复用,避免资源的重复创建和销毁带来的性能开销在线程池中,线程池可以管理一堆线程,让线程执行完任务之后不会进行销毁,而是继续去处理其它线程已经提交的任务降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统 的稳定性,使用线程池可以进行统一的分配,调优和监控。原创 2024-07-20 19:26:07 · 1606 阅读 · 0 评论 -
Java并发编程(七)—ThreadLocal的原理及应用详解
ThreadLocal 是 Java 中的一种特殊机制,它为每个线程提供了一个独立的变量副本,主要用于解决多线程环境下的线程安全问题通过 ThreadLocal,每个线程可以拥有自己的变量副本,从而避免了线程间的数据竞争和同步问题。原创 2024-08-12 18:21:44 · 1690 阅读 · 0 评论 -
Java并发编程(八)——异步编程之CompletableFuture
CompletableFuture是一种用于处理异步任务和并发编程的强大工具类,支持异步任务的创建、组合、变换和错误处理,提供了丰富的 API 来简化并发编程,提供了丰富的链式调用方式,支持非阻塞的异步编程模式。原创 2024-08-14 17:19:33 · 1920 阅读 · 0 评论