Guarded Suspension 模式
适用的情况
相比于Single Thread Exception模式, 本模式加入了加入了守护条件来确保共享实例在被线程访问前是正确的状态
实现的方式
如果实例是不正确的, 那么就让前来访问的线程执行wait(), 在线程恢复到正确状态的时候, 由持有锁的进程来唤醒等待的线程继续访问被守护的实例.
线程恢复到正确状态的时候, 一定要执行notify()或notifyAll(),否则等待的线程将永远无法被唤醒!
相关的模式
Single Thread Exception模式的升级版, 增加了守护条件!
如果希望在实例是非正确的条件下, 来访问的线程不进行等待, 而是直接返回, 可以使用Balking模式
代码示例:
package com.graphic.gu...
Single Thread Exception模式
适用的情况
当多个线程同时对可变实例进行操作的情况下, 实例就会变成非线程安全.
实现的方式
Synchronized关键字
synchronized使得指定的方法或者代码块只能串行执行, 也就是同一时间段, 只能有一个线程能对synchronized锁定的地方进行访问.
synchronized 声明在方法上
默认锁定的对象是this
synchronized 声明在代码块上
要指定要锁定的对象, 或者指定锁定的标志
多个线程同时访问synchonized加锁的方法或者代码段, 就会发生阻塞, 除了获得锁的线程, 其他线程会进入锁定对象的同步队列, 获得锁的线程完成相关任务后, 随机唤醒一个等待队列里面的线程, 获得锁. 以此类推.
...
Immutable模式
适用的情况
多个线程之间共享对象, 但是该对象的状态不会发生变化
用于提高Single Thread Exception模式的吞吐量
实现的方式
使对象的状态不可发生变化, 从而使其线程安全
private / final 关键字
相关的方式
对象的状态是可以改变的, 那么可以使用Single Thread Exception模式
读的次数要远远大于写的情况下, 可以进行读写分离, 使用Read-Write Lock模式
代码示例:
package com.graphic.immutable;
/**
* @author youngxinler 19-5-19 下午8:26
* @version 0.1
*
* 通过final关键字, 确保了只能在字段初...
面向对象的三大特性
1.封装
把客观事物封装成抽象的类, 类可以选择把自己的数据和方法只让可信任的类进行操作, 对不可信的进行隐藏.
类 = 数据 + 操作
通过封装, 对象对内部数据和操作进行不同程度的保护, 以防止其他操作意外地改变或错误地使用对象的数据和操作, 发生我们预想之外的非安全操作.
2.继承
通过继承可以使用现有类的所有数据和操作, 并且可以对现有类进行扩展.
被继承的类被称为: 父类 / 基类 / 超类
实现继承的类被称为: 子类 / 派生类
继承的实现方式有两种:
接口继承
接口继承仅使用接口的属性和方法, 但是子类必须提供其具体实现
类继承
类继承直接使用现有类的属性和方法而无需提供其具体实现
组合也是继承一种, 但有点不太容易...
43 post articles, 9 pages.