高并发JUC
文章平均质量分 91
林寻星辰
这个作者很懒,什么都没留下…
展开
-
java并发编程之美第一章并发编程基础(读书笔记)
是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位是进程的一次执行路径,一个进程至少有一个线程,进程中的多个线程共享进程的资源.线程是CPU分配的基本单位每个线程都有自己的栈资源,用于存储该线程的局部变量,这些局部变量是该线程私有的,其他线程无法访问,除此之外栈还可以用来存放线程的调用栈帧.堆是一个进程中最大的一个内存,堆是被进程中的所有线程共享的,是进程创建时分配的,堆里面主要存放使用new操作创建的对象实例.存放JVM加载的类,常量及静态变量等信息,也是线程共享的.原创 2023-04-13 23:09:37 · 510 阅读 · 6 评论 -
详解Condition的await和signal等待通知机制
任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll()几个方法实现等待/通知机制,同样的, 在java Lock体系下依然会有同样的方法实现等待/通知机制。从整体上来看。两者除了在使用方式上不同外,在。原创 2023-03-16 13:23:13 · 734 阅读 · 1 评论 -
高并发编程JUC之进程与线程高并发编程JUC之进程与线程
1.准备 pom.xml 依赖如下: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target&g原创 2023-03-06 20:28:23 · 327 阅读 · 0 评论 -
java并发编程JUC之进程和线程
IO 操作不占用 cpu,只是我们一般拷贝文件使用的是【阻塞 IO】,这时相当于线程虽然不用 cpu,但需要一 直等待 IO 结束,没能充分利用线程。所以才有后面的【非阻塞 IO】和【异步 IO】优化。原创 2023-03-05 22:20:28 · 216 阅读 · 0 评论 -
java高级篇之三大性质总结:原子性、可见性以及有序性
synchronized: 具有原子性,有序性和可见性;volatile:具有有序性和可见性参考文献《java并发编程的艺术》《深入理解java虚拟机》原创 2023-03-03 08:16:25 · 1354 阅读 · 2 评论 -
java面试题(十二)之多线程篇
参考答案在线程的生命周期中,它要经过新建(New)、就绪(Ready)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态。尤其是当线程启动以后,它不可能一直“霸占”着CPU独自运行,所以CPU需要在多条线程之间切换,于是线程状态也会多次在运行、就绪之间切换。当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时它和其他的Java对象一样,仅仅由Java虚拟机为其分配内存,并初始化其成员变量的值。原创 2023-02-06 09:55:39 · 327 阅读 · 0 评论 -
牛客java刷题知识点总结(五)
被static修饰的变量称为静态变量,静态变量属于整个类,而局部变量属于方法,只在该方法内有效,所以static不能修饰局部变量1.保证此变量对所有的线程的可见性,这里的“可见性”,如本文开头所述,当一个线程修改了这个变量的值,volatile 保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新。Java内存模型)来完成。2.禁止指令重排序优化。有volatile修饰的变量,赋值后多执行了一个“load addl $0x0, (%esp)”操作,这个操作相当于一个内存屏障。原创 2022-12-15 21:40:55 · 364 阅读 · 0 评论 -
高并发编程之ThreadPool 线程池
线程池(英语:thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。例子: 10 年前单核 CPU 电脑,假的多线程,像马戏团小丑玩多个球,CPU 需要来回切换。现在是多核电脑,多个线程各自跑在独立的 CPU 上,不用切换效率高。原创 2022-12-14 21:52:03 · 366 阅读 · 0 评论 -
高并发编程之阻塞队列
Concurrent 包中,BlockingQueue 很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了 BlockingQueue 家庭中的所有成员,包括他们各自的功能以及常见使用场景。阻塞队列,顾名思义,首先它是一个队列, 通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出;当队列是空的,从队列中获取元素的操作将会被阻塞当队列是满的,从队列中添加元素的操作将会被阻塞。原创 2022-12-14 17:30:00 · 528 阅读 · 0 评论 -
高并发编程之JUC 三大辅助类和读写锁
现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写的操作了。针对这种场景,原创 2022-12-14 16:40:06 · 295 阅读 · 0 评论 -
高并发编程之多线程锁和Callable&Future 接口
也就是说如果一个实例对象的非静态同步方法获取锁后,该实例对象的其他非静态同步方法必须等待获取锁的方法释放锁后才能获取锁,可是别的实例对象的非静态同步方法因为跟该实例对象的非静态同步方法用的是不同的锁,所以毋须等待该实例对象已获取锁的非静态同步方法释放锁就可以获取他们自己的锁。但是一旦一个静态同步方法获取锁后,其他的静态同步方法都必须等待该方法释放锁后才能获取锁,而不管是同一个实例对象的静态同步方法之间,还是不同的实例对象的静态同步方法之间,只要它们同一个类的实例对象!为此,可以使用 Future 对象。原创 2022-12-14 16:16:13 · 276 阅读 · 0 评论 -
高并发编程之线程间通信和集合的线程安全
=原创 2022-12-13 17:03:23 · 90 阅读 · 0 评论 -
高并发编程之什么是 Lock 接口
Lock 锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作。它们允许更灵活的结构,可能具有非常不同的属性,并且可能支持多个关联的条件对 象。Lock 提供了比 synchronized 更多的功能。原创 2022-12-13 16:24:14 · 241 阅读 · 0 评论 -
高并发编程之什么是 JUC
在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的。JUC就是 java.util .concurrent 工具包的简称。这是一个处理线程的工具包,JDK1.5 开始出现的。原创 2022-12-13 16:07:33 · 124 阅读 · 0 评论