![](https://img-blog.csdnimg.cn/876a740d0ff44b9d9ba792c6d720a4ec.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JUC学习
文章平均质量分 96
入门
砖瓦程序猿
总结、记录、分享、交流
展开
-
七、JUC辅助类
CountDownLatch 类可以设置一个计数器,然后通过 countDown 方法来进行减 1 的操作,使用 await 方法等待计数器不大于 0,然后继续执行 await 方法之后的语句。CountDownLatch 主要有两个方法,当一个或多个线程调用 await 方法时,这些线程会阻塞其它线程调用 countDown 方法会将计数器减 1(调用 countDown 方法的线程不会阻塞)当计数器的值变为 0 时,因 await 方法阻塞的线程会被唤醒,继续执行。原创 2023-07-17 13:16:40 · 102 阅读 · 0 评论 -
八、读写锁
ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的。所有 ReadWriteLock 实现都必须保证 writeLock 操作的内存同步效果也要保持与相关 readLock 的联系。也就是说,成功获取读锁的线程会看到写入锁之前版本所做的所有更新。与互斥锁相比,读-写锁允许对共享数据进行更高级别的并发访问。虽然一次只有一个线程(writer。原创 2023-07-18 15:02:01 · 128 阅读 · 0 评论 -
九、阻塞队列
Concurrent 包中, BlockingQueue 很好的解决了多线程中,如何高效安全“传输” 数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。详细介绍 BlockingQueue 家庭中的所有成员,包括他们各自的功能以及常见使用场景。阻塞队列,顾名思义,首先它是一个队列, 通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出;当队列是空的,从队列中获取元素的操作将会被阻塞当队列是满的,从队列中添加元素的操作将会被阻塞。原创 2023-07-19 14:41:54 · 283 阅读 · 0 评论 -
六、Callable接口
在主线程中需要执行比较耗时的操作时,但又不想阻塞主线程时,可以把这些作业交给 Future 对象在后台完成, 当主线程将来需要时,就可以通过 Future对象获得后台作业的计算结果或者执行状态一般 FutureTask 多用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果仅在计算完成时才能检索结果;如果计算尚未完成,则阻塞 get 方法。一旦计算完成,就不能再重新开始或取消计算。get 方法而获取结果只有在计算完成时获取,否则会一直阻塞直到任务转入完成状态,然后会返回结果或者抛出异常。原创 2023-07-16 15:31:30 · 157 阅读 · 0 评论 -
五、多线程锁
synchronized 实现同步的基础: Java 中的每一个对象都可以作为锁。具体表现为以下 3 种形式。对于普通同步方法,锁是当前实例对象。对于静态同步方法,锁是当前类的 Class 对象。对于同步方法块,锁是 Synchonized 括号里配置的对象当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。原创 2023-07-15 16:39:46 · 148 阅读 · 0 评论 -
四、Java集合的线程安全问题
Java集合线程安全问题原创 2023-07-14 11:16:00 · 219 阅读 · 0 评论 -
三、线程间通信
线程通信基本方法原创 2023-07-13 15:01:46 · 120 阅读 · 0 评论 -
二、Lock接口简介
Lock和有以下几点不同Lock是一个接口,而是 Java 中的关键字,是内置的语言实现。在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;3.Lock可以让等待锁的线程响应中断,而却不行,使用时,等待的线程会一直等待下去,不能够响应中断;通过Lock可以知道有没有成功获取锁,而却无法办到。Lock可以提高多个线程进行读操作的效率。原创 2023-07-12 11:30:24 · 155 阅读 · 0 评论 -
一、JUC入门
JUC原创 2023-07-11 09:21:56 · 125 阅读 · 0 评论