欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java并发编程-线程安全与基础构建模块

程序员文章站 2022-04-21 09:27:07
...
设计线程安全的类
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 futuretask