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

设计线程安全的类
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 实例,测试使用,例子有写拙劣
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值