java并发编程
文章平均质量分 94
深入浅出Java并发编程
初念初恋
Java高级开发工程师,主要分享Java技术相关的东西,包括但不限于源码解析、面试宝典、日常问题排查、工作趣文等等。
展开
-
java并发编程:CopyOnWrite容器介绍
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。CopyOnWrite容器非常有用,可以在非常多的并发场景中使用到。CopyOnWrite容器即写时复制的容器。原创 2023-06-11 13:27:49 · 884 阅读 · 2 评论 -
java并发编程:LinkedBlockingQueue详解
在集合框架里,想必大家都用过ArrayList和LinkedList,也经常在面试中问到他们之间的区别。ArrayList和ArrayBlockingQueue一样,内部基于数组来存放元素,而LinkedBlockingQueue则和LinkedList一样,内部基于链表来存放元素。原创 2023-06-11 09:27:06 · 1077 阅读 · 0 评论 -
java并发编程:ArrayBlockingQueue详解
ArrayBlockingQueue 顾名思义是基于数组的阻塞队列。数组是要指定长度的,所以使用 ArrayBlockingQueue 时必须指定长度,也就是它是一个有界队列。它实现了 BlockingQueue 接口,有着队列、集合以及阻塞队列的所有方法。ArrayBlockingQueue 是线程安全的,内部使用 ReentrantLock 来保证。ArrayBlockingQueue 支持对生产者线程和消费者线程进行公平的调度。原创 2023-06-10 17:41:49 · 1899 阅读 · 0 评论 -
java并发编程:Fork/Join并发框架介绍
Fork/Join框架是一个实现了ExecutorService接口的多线程处理器,它专为那些可以通过递归分解成更细小的任务而设计,最大化的利用多核处理器来提高应用程序的性能。与其他ExecutorService相关的实现相同的是,Fork/Join框架会将任务分配给线程池中的线程。而与之不同的是,Fork/Join框架在执行任务时使用了工作窃取算法。fork在英文里有分叉的意思,join在英文里连接、结合的意思。原创 2023-06-09 19:19:49 · 1326 阅读 · 0 评论 -
Java中的并发工具类详解
在JDK的并发包里提供了几个非常有用的并发工具类。CountDownLatch、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类提供了在线程间交换数据的一种方法。原创 2023-06-09 08:28:47 · 802 阅读 · 0 评论 -
一文弄懂Java线程池原理
在工作中,很多人因为不了解线程池的实现原理,把线程池配置错误,从而导致各种问题。希望你们阅读完本文,能够学会合理的使用线程池。原创 2023-06-07 20:18:04 · 289 阅读 · 0 评论 -
深入理解Java线程间通信
线程间通信使线程成为一个整体,提高系统之间的交互性,在提高CPU利用率的同时可以对线程任务进行有效的把控与监督。原创 2023-06-08 17:07:35 · 637 阅读 · 0 评论 -
java并发编程:CAS与原子操作
当多个线程同时使用CAS操作一个变量时,只有一个会胜出,并成功更新,其余均会失败,但失败的线程并不会被挂起,仅是被告知失败,并且允许再次尝试,当然也允许失败的线程放弃操作。原创 2023-06-07 08:05:49 · 447 阅读 · 0 评论 -
java并发编程:可见性、原子性、有序性三大特性详解
特性Atomic变量volatile关键字Lock接口synchronized关键字原子性可以保障无法保障可以保障可以保障可见性可以保障可以保障可以保障可以保障有序性无法保障一定程度保障可以保障可以保障。原创 2023-06-05 20:50:29 · 1285 阅读 · 0 评论 -
java并发编程:重排序与happens-before介绍
计算机在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排。为什么指令重排序可以提高性能?简单地说,每一个指令都会包含多个步骤,每个步骤可能使用不同的硬件。因此,流水线技术产生了,它的原理是指令1还没有执行完,就可以开始执行指令2,而不用等到指令1执行结束之后再执行指令2,这样就大大提高了效率。但是,流水线技术最害怕中断,恢复中断的代价是比较大的,所以我们要想尽办法不让流水线中断。指令重排就是减少中断的一种技术。a = b + c;d = e - f;先加载b、c(原创 2023-06-05 15:56:29 · 470 阅读 · 0 评论 -
java并发编程:volatile关键字详解
在Java中,volatile关键字有特殊的内存语义。volatile主要有以下两个功能:保证变量的内存可见性;禁止volatile变量与普通变量重排序。原创 2023-06-04 22:20:01 · 562 阅读 · 0 评论 -
java并发编程:synchronized关键字与锁详解
这篇文章我们来聊一聊Java多线程里面的“锁”。,Java中的每一个对象都可以作为一个锁。还有一点需要注意的是,我们常听到的其实也是对象锁。Java类只有一个Class对象(可以有多个实例对象,多个实例共享这个Class对象),而Class对象也是特殊的Java对象。所以我们常说的类锁,其实就是Class对象的锁。我们先来看下多线程下为什么会存在线程安全问题?原创 2023-06-04 14:00:19 · 856 阅读 · 0 评论 -
java并发编程:java内存模型介绍
Java线程之间的通信由Java内存模型(简称JMM)控制,从抽象的角度来说,JMM定义了线程和主内存之间的抽象关系。原创 2023-06-04 13:50:58 · 515 阅读 · 0 评论 -
java并发编程:多线程基础知识介绍
虽然进程的出现,使得操作系统的性能大大提升,但是随着时间的推移,人们并不满足一个进程在一段时间只能做一件事情,如果一个进程有多个子任务时,只能逐个得执行这些子任务,很影响效率。程序计数器是一个专用的寄存器,用于表明指令序列中 CPU 正在执行的位置,存的值为正在执行的指令的位置或者下一个将要被执行的指令的位置,具体实现依赖于特定的系统。当进程暂停时,它会保存当前进程的状态(进程标识,进程使用的资源等),在下一次切换回来时根据之前保存的状态进行恢复,接着继续执行。同时进程保存着程序每一个时刻运行的状态。原创 2023-06-04 13:47:49 · 625 阅读 · 0 评论