设计线程安全的类
1、实例封闭,将数据封装在对象内部,可以将数据的访问控制限制在对象的方法上,从而更容易确保线程在访问数据时总能持有正确的锁。
Java 中 Collections 类 为ArrayList,HashMap 提供了线程安全的实现。
主要是通过装饰器模式将容器封装在一个同步的包装器对象中,而包装器将接口中的每个方法都实现为同步方法,并将调用请求发布到底层的容器对象上。
2、java监视器模式,将对象所有可变状态都封装起来,并有对象自己的内置锁来保护
3、线程安全性的委托
4、客户端加锁 对于使用某个对象X的客户端代码,使用X本身用于保护其状态的锁来保护这段客户端代码。
5、组合
基础构建模块
1、同步容器类
实现线程安全的方式:将他们的状态封装起来,并对每个公有的方法进行同步,使得每次只有一个线程能访问容器的状态。
2、并发容器
Queue 操作不会阻塞,如果队列为空,则获取元素的操作将返回空值。
BlockingQueue 扩展了Queue ,实现了 生产者-消费者 模式
ConcurrentHashMap 提供了分段锁的实现机制。
3、FutureTask ,表示的计算式通过callable实现的。
Future.get()的行为取决于任务的状态(等待运行,正在运行,运行完成)。如果任务已经完成,那么get会立即返回结果。
否则,get将阻塞知道任务进入完成状态,然后返回结果或者抛出异常。
FutureTask将计算结果从执行计算的线程传递给获取计算结果的线程。
Callable表示的任务可以抛出一个受检查或者未受检查的异常,并且任何代码都可以抛出一个Error。无论任何代码都可以抛出什么异常,都会封装到一个
ExecututionException中,并在Future.get中重新抛出。
4、信号量:计数信号量用来控制同时访问某个特定资源的操作数量或者同时执行某个指定操作的数量。Semaphore
附件为FutureTask 实例,测试使用,例子有写拙劣
分享到:
相关推荐
《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括同步容器类、并发容器类、阻塞队列和生产者消费者模式、阻塞和中断方法、同步工具类。最后是构建高效且可伸缩的结果缓存
第5章 基础构建模块 5.1 同步容器类 5.1.1 同步容器类的问题 5.1.2 迭代器与Concurrent-ModificationException 5.1.3 隐藏迭代器 5.2 并发容器 5.2.1 ConcurrentHashMap 5.2.2 额外的原子Map操作 5.2.3 ...
《Java并发编程实战》个人读书笔记,非常详细: 1 简介 2 线程安全性 3 对象的共享 4 对象的组合 5 基础构建模块 6 任务执行 7 取消与关闭 8 线程池的使用 9 图形用户界面应用程序 10 避免活跃性危险 11 性能与可...
`java.util.concurrent`包是Java标准库中专门用于并发编程的模块,它包含了各种线程安全的数据结构、同步机制和执行模型。这个包的引入极大地简化了并发编程的复杂性,提供了一套高效且易用的并发工具。 **3.2 ...
第5章 基础构建模块 5.1 同步容器类 5.1.1 同步容器类的问题 5.1.2 迭代器与Concurrent-ModificationException 5.1.3 隐藏迭代器 5.2 并发容器 5.2.1 ConcurrentHashMap 5.2.2 额外的原子Map操作 5.2.3 ...
Java并发编程实战,第1章 简介,第2章 线程安全性 第3章 对象的共享 第4章 对象的组合 第5章 基础构建模块 第6章 任务执行 第7章 取消与关闭 第8章 线程池的使用 第9章 图形用户界面应用程序 第10章 避免...
Java并发编程实战是针对Java并发编程的详细指南,随着多核处理器的普及,多线程并发编程成为了提升应用程序性能的关键技术之一。从Java 5和Java 6版本开始,Java在并发编程方面取得了显著的进步,不仅改进了Java...
20. **并发库(Java Concurrency API)**:从Java 5开始,提供了丰富的并发工具类,如ExecutorService、Semaphore、CountDownLatch等,帮助开发者编写高效、线程安全的并发程序。 以上知识点覆盖了Java编程的基本到...
Java并发编程 背景介绍 并发历史 必要性 进程 资源分配的最小单位 线程 CPU调度的最小单位 线程的优势 (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 ...
7. **多线程**:如果系统需要同时处理多个任务,如并发查询,Java的多线程技术将派上用场,可以提高程序的效率和响应速度。 8. **设计模式**:系统设计可能应用到多种设计模式,如单例模式用于数据库连接管理,工厂...
6. **类与对象**:面向对象编程是Java的核心,掌握类的定义、对象的创建和使用,以及封装、继承和多态的概念,将有助于我们构建复杂的软件系统。 7. **异常处理**:Java的异常处理机制使得程序在遇到错误时能够优雅...
15. **模块系统**:讲解Java 9引入的模块系统,包括模块的概念、模块描述符、模块间的依赖关系以及如何构建模块化项目。 通过阅读《Java核心技术-卷1(基础知识-原书第10版)》,读者可以系统地学习到Java编程的基础...
Java多线程知识点梳理: ...对于有一定Java基础但缺乏多线程和并发编程经验的开发者来说,本教程提供了快速上手的指导。学习完本教程之后,开发者将能编写简单的线程程序,并能够理解和应用线程间的通信和同步机制。
通过理解线程的基本概念、掌握线程的创建与控制、熟悉线程间的同步与通信以及合理利用并发工具类和线程池,开发者可以更好地构建稳定高效的多线程应用程序。希望本文能帮助你更好地理解和运用Java多线程技术。
本文将深入探讨这两个主题,并结合资源包"多线程精品资源--多线程与高并发.zip"中的内容,提供相关知识点的详细说明。 首先,多线程是指在一个进程中同时执行多个线程,这使得程序可以并行处理任务,提高CPU资源的...