JAVA多线程设计模式(上)

临界区模式/以一个线程执行模式

共享资源的线程安全

不变模式

不变类

实例状态绝不会改变的类

访问这个实例时,可以省去使用共享互斥机制所会浪费的时间,妥善运用的话将会提高程序性能。

String就是一个不变类

不变模式的安全措施

声明不变类为final

把不变类声明为final,不允许别人定义它的子类,虽然不是不变模式的必要条件,但是预防子类可能修改字段值的一种安全措施。

声明不变类内字段为private

访问权限为private,字段只有类内部可见,虽然不是不变模式的必要条件,但是可以预防子类擅自修改字段值的安全措施。

适用性

当实例产生后,状态不再变化时

字段都是final,且不定义setter方法(用于改变字段值的方法的总称)

实例需要共享,而且访问很频繁时

访问很频繁的话使用synchronized方法需要频繁加锁,性能可能下降

保护性暂挂模式/停等模式

当现在并不适合马上执行某个操作时,就想要执行该操作的线程等待。

施加条件加以防卫

为了某一语句的安全执行,需要满足的条件称为Guarded Suspension Pattern的警戒条件(guard condition)。

不等待的情况、等待的情况

警戒条件成立时,线程不会进入while块,而会直接进行到下一语句,线程不会等待。

当警戒条件不成立时,线程会进入while块中,执行wait开始等待。需要依赖notify/notifyAll才能被唤醒。

阻止模式

适用性

不需要刻意去执行的时候
不想等待警戒条件成立时

Balking Pattern的特征是“不等待”。当警戒条件不成立时,就直接退出,马上进入下一个工作。

警戒条件只有一次成立时

如实例的初始化、终结处理等“无法执行两次以上的操作”。

表达balk结果的方式

忽略balk的发生

不通知调用端balk的发生

以返回值表达balk的发生

以boolean的返回值/或null表示balk的发生

以异常表达balk的发生

方法throw出异常

介于阻止模式与停等模式中间:timeout

在条件成立前等待一定时间,若还不成立酒balk退出。

synchronized没有timeout,也不能中断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值