CodeGym University
学习
课程
任务
调查和小测验
游戏
帮助
提醒时间表
社区
用户
论坛
聊天
文章
成功故事
活动
评论
订阅服务
浅色主题
课程
评论
关于我们
开始
开始学习
立即开始学习
目标地图
课程
Module 3. Java Professional
级别 19
Java 并发库
模块 3
第 19 级,
课程 0
如果字段被声明为或由在任何读写之前获取的唯一锁保护,则对该字段的读写是原子操作。但是如果仍然遇到错误,那么你会得到一个关于重新排序的错误(改变顺序,重新排序)。它在不正确同步的多线程程序中表现出来,其中一个线程可以观察到其他线程产生的效果。
Java 中的原子操作
模块 3
第 19 级,
课程 1
原子操作出现的先决条件 让我们看一下这个示例,以帮助您了解原子操作的工作原理: public class Counter {
并发集合
模块 3
第 19 级,
课程 2
CopyOnWriteArrayList 对给定集合的add、set、remove操作会导致创建内部数组的新副本。这确保我们不会捕获ConcurrentModificationException。 请记住,在复制数组时,只会复制对对象的引用,包括对非线程安全元素字段的访问。此类集合最适用于写入操作最少的情况。 CopyOnWriteArrayList是ArrayList 的线程安全模拟,基于 CopyOnWrite 算法实现。其他方法和构造函数如下所述: CopyOnW
并发队列
模块 3
第 19 级,
课程 3
非阻塞队列 链接节点上的线程安全和最重要的非阻塞队列实现。 ConcurrentLinkedQueue - 它使用适用于垃圾收集器的无等待算法。该算法非常高效且快速,因为它是基于 CAS 构建的。size()方法可以运行很长时间,所以最好不要一直拉。 ConcurrentLinkedDeque - Deque 代表双端队列。这意味着可以从两侧添加和提取数据。因此,该类支持两种操作模式:FIFO(先进先出)和 LIFO(后进先出)。 实际上,如果绝对需要 LIFO,
同步器:在 Java 中同步对资源的访问
模块 3
第 19 级,
课程 4
信号 当使用文件系统时需要限制线程数时,通常会使用信号量。通过计数器控制对文件或其他共享资源的访问。如果其值大于零,则允许访问,但同时计数器会减少。 在计数器归零的那一刻,当前线程将被阻塞,直到资源被另一个线程释放。必须通过构造函数设置权限参数的数量。 您需要单独选择此参数,具体取决于您的计算机或笔记本电脑的功率。 public class Main {
执行者:可执行对象
模块 3
第 19 级,
课程 5
6.1 可执行对象 所以我们得到了包裹的最大部分。它将描述用于运行异步任务并能够通过 Future 和 Callable 接口获取结果的接口,以及用于创建线程池的服务和工厂:ThreadPoolExecutor、ScheduledPoolExecutor、ForkJoinPool。 为了更好地理解,让我们对接口和类进行一些分解。 6.2 可执行对象的实现 Future是获取异步操作结果的绝佳接口。这里的关键方法是 get 方法,它会阻塞当前线程(有或没有超时),直到另一
执行人服务
模块 3
第 19 级,
课程 6
执行者 Executor是实现Runnable任务启动的类的基接口。这有助于添加任务以及如何启动它。 ExecutorService是一个接口,它扩展了Executor 的属性,它描述了用于运行Runnable或Callable任务的服务。提交方法接受Callable或Runnable形式的任务作为,并使用 Future 作为返回值,通过它可以得到结果。 invokeAll方法负责执行任务,返回任务列表及其状态和完成结果。 invokeAny方法负责执行任务,返回成功完成任务
锁:锁定对资源的访问
模块 3
第 19 级,
课程 7
重入锁 条件- 在锁中应用条件允许您实现对流访问管理的控制。锁定条件是java.util.concurrent.locks中的Condition接口的一个对象。使用Condition对象在很多方面类似于使用Object类wait/notify/notifyAll,这些方法在前面的主题之一中进行了讨论。 Lock是锁框架的一个接口,与同步相比,它提供了一种灵活的方法来限制对资源/块的访问。使用多个锁时,释放顺序可以任意,也可以配置。当锁已经被捕获时,也有可能处理这种情况。 Re
Please enable JavaScript to continue using this application.