Java并发编程
文章平均质量分 73
Java并发编程
苍老流年
对未来的不确定与焦虑保持独立的判断与认知
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
1. Java内存模型
java内存模型Java虚拟机试图定义一种内存模型(JavaMemoryModel,JMM)来屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。主内存与工作内存Java内存模型规定了所有的变量都存储在主内存中,线程的工作内存保存了该线程使用到的变脸的主存拷贝副本,线程对变量的所有操作(读取,赋值)都必须在工作内存中进行,而不能直接读...原创 2018-06-21 18:28:48 · 221 阅读 · 0 评论 -
2. Java wait/notifyAll()虚假唤醒问题与解决
任何一个线程执行notifyAll唤醒了所有处于阻塞队列中的线程,我们希望的是AA唤醒线程BB和DD,而不唤醒线程CC,假设AA线程唤醒了CC线程则会跳过if代码块,执行后面的。虚假唤醒:在一定的条件下notifyAll会唤醒很多在阻塞态的线程,但只有部分的线程唤醒是有用的,其余线程的唤醒是不需要的。解决办法:将if判断改成while,这样程序就不会跳出判断代码块,产生虚假唤醒了。输出的结果不对,什么原因呢?在前面代码的基础上增加2个线程。两个线程交替输出0和1。四个线程交替输出0和1。原创 2025-01-19 16:39:53 · 466 阅读 · 0 评论 -
3. synchronized 使用方法与实现原理
关键字原理原创 2020-04-12 15:39:03 · 410 阅读 · 0 评论 -
4. java死锁定位与预防
死锁死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。死锁发生的原因死锁的发生是由于资源竞争导致的,导致死锁的原因如下:系统资源不足,如果系统资源充足,死锁出现的可能性就很低。进程(线程)运行推进的顺序不合适。资源分配不当等。死锁发生的条件死锁的发生的四个必要条件:互斥条件:一个资源每次只能被...原创 2018-06-23 00:24:48 · 467 阅读 · 0 评论 -
5. JavaThreadLocal使用与原理
作用是为变量在每个线程中创建一个副本,这样每个线程就可以访问自己内部的副本变量,同时该变量对其他线程而言是封闭的,这样就保证了线程安全。ThreadLoca方法描述设置当前线程变量获取当前线程变量移除当前线程设置的变量自定义初始化当前线程的默认值。原创 2025-01-22 13:38:42 · 370 阅读 · 0 评论 -
6. Java Atomic类使用
JUC包中除了锁,还提供了原子操作来实现线程并发对临界资源的互斥访问。Atomic包中提供了多种类型的原子操作类:它们都是CAS(compareAndSwap)来实现原子性。1.AtomicIntegerpublic class AtomicIntegerTest { public static void main(String[] args) { Atomic...原创 2020-04-12 15:07:18 · 761 阅读 · 0 评论 -
7. Java CyclicBarrier使用
概述CyclicBarrier (周期障碍)类可以帮助同步,它允许一组线程等待整个线程组到达公共屏障点,所有被阻塞的线程才能继续执行。CyclicBarrier好比一扇门,默认情况下关闭状态,堵住了线程执行的道路,直到所有线程都就位,门才打开,让所有线程一起通过。 CyclicBarrier类位于java.util.concurrent包下,CyclicBarrier提供2个构造器:...原创 2018-07-05 12:28:28 · 595 阅读 · 1 评论 -
8. Java CountDownLatch使用
概述CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。它的实现原理通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务。CountDownLatch类位于java.util.concurr...原创 2018-07-05 15:02:32 · 1316 阅读 · 0 评论 -
9. Java 线程池
当我们进一步查看以上方法的底层调用时,会发现都是调用ThreadPoolExecutor创建线程池。Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。Java中创建线程池很简单,Executors类提供了几个快捷方法。5.workQueue: 等待队列,用来保存等待执行的任务。6.threadFactory: 线程工厂,用来创建线程。3.keepAliveTime: 线程的空闲的存活时间。原创 2025-02-18 14:56:57 · 266 阅读 · 0 评论 -
akka基本使用
使用入门原创 2020-07-08 11:25:09 · 999 阅读 · 0 评论
分享