![](https://img-blog.csdnimg.cn/aad79a92d30347d09485dfb9ece79b3c.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
juc
文章平均质量分 87
JUC的核心目标是实现高效的线程安全,通过提供各种并发数据结构、同步器和执行框架来解决多线程编程中的各种问题
Hzq958
一个平平无奇的在校 java 练习生
展开
-
Java 并发编程 一 ( synchronized 、ReentrantLock )
在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时 Lock 的性能要远远优于synchronized。如果绑定的是本类对象,很明显是不行,因为是两个账户,锁是不同的,进入了不同房间。3. Lock 可以让等待锁的线程响应中断,而 synchronized 却不行,使用synchronized 时,等待的线程会一直等待下去,不能够响应中断;锁住的不为同一对象,不存在锁竞争,第二个线程先执行,第一个锁的是类(锁住的为同一对象,2个线程都有可能执行。原创 2023-06-28 16:13:44 · 101 阅读 · 1 评论 -
Java 并发编程二 (线程间的通信)
注意:在调用 Condition 的 await()/signal()方法前,也需要线程持有相关 的 Lock 锁,调用 await()后线程会释放这个锁,在 singal()调用后会从当前 Condition 对象的等待队列中,唤醒 一个线程,唤醒的线程尝试获得锁, 一旦 获得锁成功就继续执行。分别为A,B,C,D,其中A,C线程做+1操作,B,D线程做-1操作,想要的结尾应该是A,C线程输出值为1,B,D线程输出值为0(方法中有如下介绍在一个参数版本中,中断和虚假唤醒是可能的,并且该方法应该始终在。原创 2023-08-21 18:09:15 · 37 阅读 · 0 评论 -
java 并发编程 三(死锁 + 排查)
死锁是指两个或两个以上的线程在执行过程中,因抢夺资源而造成的一种互相等待的现象,若无外力干涉,则它们无法再继续推进下去。win + R 输入 jconsole -----> 选择进程 -------> 连接。此时我们的代码一直处于运行状态。原创 2023-07-07 00:02:29 · 56 阅读 · 1 评论 -
Java 并发编程 四(线程中断、阻塞、唤醒)
首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,自己来决定自己的命运,所以,都已经被废弃了其次,在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的协商机制----中断,也即中断标识协商机制中断只是一种协作协商机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自行实现。原创 2023-07-07 15:49:16 · 613 阅读 · 1 评论 -
Java 并发编程 五 (JUC 辅助类)
CountDownLatch 类可以设置一个计数器,然后通过 countDown 方法来进行减 1 的操作,使用 await 方法等待计数器不大于 0,然后继续执行 await 方法之后的语句原创 2023-08-21 18:53:56 · 37 阅读 · 1 评论 -
Java 并发编程 六(Future --> CompletableFuture)
使用。原创 2023-07-06 22:26:39 · 239 阅读 · 1 评论 -
Java 并发编程七(JMM 与volatile)
由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有的地方成为栈空间),工作内存是每个线程的私有数据区域,而Java内存模型中规定所有变量都存储在主内存,主内存是共享内存区域,所有线程都可以访问,,并执行自己的操作,一旦其中一个线程对volatile修饰的变量先行完成操作刷回主内存后,另一个线程会作废自己的操作,然后重新去读取最新的值再进行操作,这样的话,它自身的那一次操作就丢失了。对于一个线程的执行代码而言,我们总是习惯性地认为代码的执行总是从上到下,有序执行。原创 2023-08-24 11:23:40 · 42 阅读 · 2 评论 -
Java 并发编程 八 (CAS 与原子操作类)
比如说一个线程1从内存位置V中取出A,这时候另一个线程2也从内存中取出A,并且线程2进行了一些操作将值变成了B,然后线程2又将V位置的数据变成A,这时候线程1进行CAS操作发现内存中仍然是A,预期ok,然后线程1操作成功--------缺陷:高并发后性能急剧下降----AtomicLong的自旋会成为瓶颈(N个线程CAS操作修改线程的值,每次只有一个成功过,其他N-1失败,失败的不停自旋直至成功,这样大量失败自旋的情况,一下子cpu就打高了)// 存放Cell的数组,大小为2的N次方。原创 2023-08-24 17:35:39 · 109 阅读 · 1 评论