多线程程序设计学习(9)worker pattern模式

简介: Worker pattern[工作模式]一:Worker pattern的参与者--->Client(委托人线程)--->Channel(通道,里边有,存放请求的队列)--->Request(工作内容的包装)--->Worker(工人线程)       二:Worker pattern模式什么时候使...

Worker pattern[工作模式]
一:Worker pattern的参与者
--->Client(委托人线程)
--->Channel(通道,里边有,存放请求的队列)
--->Request(工作内容的包装)
--->Worker(工人线程)
       

二:Worker pattern模式什么时候使用
--->类似生产者消费者


三:Worker pattern思考


四进阶说明
--->工作线程取出请求内容包装后,根据多态,不同的请求执行不同的业务方法

 

Request接口

 1 package com.yeepay.sxf.thread7;
 2 /**
 3  * 抽象请求
 4  * @author sxf
 5  *
 6  */
 7 public interface Request {
 8     //定义的抽象方法
 9     public void eat();
10 }
View Code

不同Request接口的实现类

人的请求包装

 1 package com.yeepay.sxf.thread7;
 2 /**
 3  * 人的请求
 4  * @author sxf
 5  *
 6  */
 7 public class PersonRequest implements Request{
 8     //姓名
 9     private String name;
10     //事物
11     private String food;
12     
13     
14     public PersonRequest(String name, String food) {
15         super();
16         this.name = name;
17         this.food = food;
18     }
19 
20 
21     @Override
22     public void eat() {
23         
24         System.out.println("PersonRequest.eat()"+name+"吃掉"+food);
25         fell();
26     }
27 
28     public void fell(){
29         System.out.println("PersonRequest.fell()"+"我吃饱了");
30     }
31     
32     
33     public String getName() {
34         return name;
35     }
36 
37 
38     public void setName(String name) {
39         this.name = name;
40     }
41 
42 
43     public String getFood() {
44         return food;
45     }
46 
47 
48     public void setFood(String food) {
49         this.food = food;
50     }
51     
52     
53 
54 }
View Code

猫的请求包装

 1 package com.yeepay.sxf.thread7;
 2 /**
 3  * 猫的请求
 4  * @author sxf
 5  *
 6  */
 7 public class CatRequest implements Request{
 8     //姓名
 9     private String name;
10     //年龄
11     private int age;
12     
13     
14     public CatRequest(String name, int age) {
15         super();
16         this.name = name;
17         this.age = age;
18     }
19 
20 
21     @Override
22     public void eat() {
23         // TODO Auto-generated method stub
24         System.out.println("CatRequest.eat()"+name+"有"+age+"月大");
25         
26     }
27 
28 
29     public String getName() {
30         return name;
31     }
32 
33 
34     public void setName(String name) {
35         this.name = name;
36     }
37 
38 
39     public int getAge() {
40         return age;
41     }
42 
43 
44     public void setAge(int age) {
45         this.age = age;
46     }
47     
48     
49 
50 }
View Code

模拟工作线程取出请求,执行不同的业务

 1 package com.yeepay.sxf.thread7;
 2 /**
 3  * 工作线程
 4  * @author sxf
 5  *
 6  */
 7 public class Test {
 8     
 9     public static void main(String[] args) {
10 
11         //模拟线程取出不同的的请求包装
12         Request peRequest=new PersonRequest("尚晓飞", "汉堡");
13         Request catRequest=new CatRequest("黑猫警长", 3);
14         //不同的请求包装利用多态调用方法,实现不同的业务
15         peRequest.eat();
16         catRequest.eat();
17     }
18 
19 }
View Code

打印结果

PersonRequest.eat()尚晓飞吃掉汉堡
PersonRequest.fell()我吃饱了
CatRequest.eat()黑猫警长有3月大

 

相关文章
|
8月前
|
负载均衡 算法 安全
基于Reactor模式的高性能网络库之线程池组件设计篇
EventLoopThreadPool 是 Reactor 模式中实现“一个主线程 + 多个工作线程”的关键组件,用于高效管理多个 EventLoop 并在多核 CPU 上分担高并发 I/O 压力。通过封装 Thread 类和 EventLoopThread,实现线程创建、管理和事件循环的调度,形成线程池结构。每个 EventLoopThread 管理一个子线程与对应的 EventLoop(subloop),主线程(base loop)通过负载均衡算法将任务派发至各 subloop,从而提升系统性能与并发处理能力。
430 3
|
前端开发 JavaScript Go
React中使用worker线程
本文介绍了在React项目中使用worker线程的方法,包括配置webpack以使用worker-loader,创建worker文件,并在组件中使用worker进行大量计算以避免阻塞主线程。
363 1
React中使用worker线程
|
9月前
|
机器学习/深度学习 监控 算法
局域网行为监控软件 C# 多线程数据包捕获算法:基于 KMP 模式匹配的内容分析优化方案探索
本文探讨了一种结合KMP算法的多线程数据包捕获与分析方案,用于局域网行为监控。通过C#实现,该系统可高效检测敏感内容、管理URL访问、分析协议及审计日志。实验表明,相较于传统算法,KMP在处理大规模网络流量时效率显著提升。未来可在算法优化、多模式匹配及机器学习等领域进一步研究。
243 0
|
SQL 数据建模 BI
【YashanDB 知识库】用 yasldr 配置 Bulkload 模式作单线程迁移 300G 的业务数据到分布式数据库,迁移任务频繁出错
问题描述 详细版本:YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 6db1237 影响范围: 离线数据迁移场景,影响业务数据入库。 外场将部分 NewCIS 的报表业务放到分布式数据库,验证 SQL 性能水平。 操作系统环境配置: 125G 内存 32C CPU 2T 的 HDD 磁盘 问题出现的步骤/操作: 1、部署崖山分布式数据库 1mm 1cn 3dn 单线启动 yasldr 数据迁移任务,设置 32 线程的 bulk load 模式 2、观察 yasldr.log 是否出现如下错
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
316 10
|
监控 Java 调度
【Java学习】多线程&JUC万字超详解
本文详细介绍了多线程的概念和三种实现方式,还有一些常见的成员方法,CPU的调动方式,多线程的生命周期,还有线程安全问题,锁和死锁的概念,以及等待唤醒机制,阻塞队列,多线程的六种状态,线程池等
1209 6
【Java学习】多线程&JUC万字超详解
|
缓存 安全 Java
【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)
单例模式下,“饿汉模式”,“懒汉模式”,单例模式下引起的线程安全问题,解锁思路和解决方法
|
Web App开发 JavaScript 前端开发
[译] 深入理解 Node.js 中的 Worker 线程
[译] 深入理解 Node.js 中的 Worker 线程
|
5月前
|
Java
如何在Java中进行多线程编程
Java多线程编程常用方式包括:继承Thread类、实现Runnable接口、Callable接口(可返回结果)及使用线程池。推荐线程池以提升性能,避免频繁创建线程。结合同步与通信机制,可有效管理并发任务。
238 6

热门文章

最新文章