多线程设计模式
文章平均质量分 51
独行客-编码爱好者
本人从事互联网开发已经5年多了,对互联网相关技术有一定的了解。希望可以和各位同仁,在编码的路上共勉。
展开
-
七、Thread-Per-Message 模式
Thread Per Message 直译过来就是“每个消息一个线程”的意思。Message 在这里可以理解为“命令”或“请求”。未每个命令或请求重新分配一个线程,由这个线程来执行处理-这就是Thread-Per-Message模式。在Thread-Per-Message 模式种,消息的“委托端”和“执行端”时不同线程,消息的委托端线程会告诉执行端线程“这项工作就交给你了”类说明 名字 说明 Main 向Host发送字原创 2022-01-27 16:51:59 · 469 阅读 · 0 评论 -
六、Read-Write Lock 模式
ShareResource角色提供了read和write操作。read操作不会改变ShareResource角色的状态,而write操作则会改变其状态。执行read和Reader角色和执行write的Writer角色是明确分开的,当read比write执行频繁时,Reader角色和Writer角色之间无需同等地执行互斥处理,这是因为Reader角色之间无需执行互斥处理。但是,完全不执行互斥处理很危险。这是因为,当Reader角色正在read时,Writer角色必须等待,而当Writ...原创 2022-01-27 16:53:02 · 166 阅读 · 0 评论 -
五、生产消费模式
创建Data 角色的线程(Producer)和使用Data的角色的线程(Consumer)正在运行,假设现在我们想要从Producer角色向Consumer 角色传递Data角色。这时我们需要在Producer角色和Consumer角色之间设置一个Channel角色,用于存储想要传递的Data角色。Channel角色担当着Data角色的中转地、桥梁、通道任务。由于将有多个线程使用Channel角色,所以我们需要在Channel角色中执行互斥处理。在Channel角色中。这样,线程之间便可原创 2022-01-27 16:45:57 · 427 阅读 · 0 评论 -
四、Balking (停止返回) 模式
Balking(停止返回) 模式中介绍:如果现在不适合执行这个操作,或者没必要执行这个操作,就停止处理,直接返回,这就是balking 模式。在Java 中,我们使用if 来检查守护条件。balk 处理的执行则是使用return 从方法中退出,或者使用throw 抛出异常。守护条件的检查处理则是使用synchronized 放在临界区中。balking 模式使用条件:1)程序不需要再执行,可以使用balking 模式2)不需要等待守护条件成立3)守护条件仅在第一次成立时B原创 2022-01-27 16:42:31 · 332 阅读 · 0 评论 -
三、Guarded Suspension(被守护的挂起) 模式
该模式中存在一个持有状态的对象。该对象只有在自身的状态合适时,才会允许线程执行目标处理。为此,我们需要首先将对象的合适状态表示为“守护条件”。然后,在执行目标处理之前,检查守护条件是否成立。只有当守护条件成立时,线程才会执行目标处理;而当守护条件不成立时,线程就会一直等到成立为止。JAVA中是使用while 语句来检查条件,使用wait 方法来执行等待的。当条件发生变化时,使用notify / notifyall 方法发出通知。示例程序: 名字 说明原创 2022-01-27 16:39:16 · 199 阅读 · 0 评论 -
二、 Immutable(不可变的) 模式
在Immutable模式中,保护类的并不是synchronized,而是immutability(不可变性)。这样一来,保护类的immutability就是程序设计人员的工作了。代码示例:package immutable.sample2;public class Main { public static void main(String[] args) { Person alice = new Person("Alice", "Alaska"); ..原创 2022-01-27 16:37:27 · 172 阅读 · 0 评论 -
一 、Single Threaded Execution 模式
当我们修改多个线程共享的实例时,实例就会失去安全性。所以,我们应该仔细找出实例状态不稳定的范围,将这个范围设为临界区,并对临界区进行保护,使其只允许一个线程同时执行。JAVA使用synchronize来定义临界区,保护多个线程共享的字段。何时使用Single Threaded Execution*多线程时*多线程访问时:当ShareResource角色的实例有可能被多个线程同时访问时,如果多线程没有操作共享资源,也不需要使用此模式,*状态有可能发生变化时:当ShareR...原创 2022-01-27 16:34:45 · 315 阅读 · 0 评论