多线程程序设计学习(9)worker pattern模式
Worker pattern[工作模式]
一:Worker pattern的参与者
--->Client(委托人线程)
--->Channel(通道,里边有,存放请求的队列)
--->Request(工作内容的包装)
--->Worker(工人线程)
二:Worker pattern模式什么时候使用
--->类似生产者消费者
三:Worker pattern思考
四进阶说明
--->工作线程取出请求内容包装后,根据多态,不同的请求执行不同的业务方法
Request接口
package com.yeepay.sxf.thread7;
/**
* 抽象请求
* @author sxf
*
*/
public interface Request {
//定义的抽象方法
public void eat();
}
不同Request接口的实现类
人的请求包装
package com.yeepay.sxf.thread7;
/**
* 人的请求
* @author sxf
*
*/
public class PersonRequest implements Request{
//姓名
private String name;
//事物
private String food; public PersonRequest(String name, String food) {
super();
this.name = name;
this.food = food;
} @Override
public void eat() { System.out.println("PersonRequest.eat()"+name+"吃掉"+food);
fell();
} public void fell(){
System.out.println("PersonRequest.fell()"+"我吃饱了");
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getFood() {
return food;
} public void setFood(String food) {
this.food = food;
} }
猫的请求包装
package com.yeepay.sxf.thread7;
/**
* 猫的请求
* @author sxf
*
*/
public class CatRequest implements Request{
//姓名
private String name;
//年龄
private int age; public CatRequest(String name, int age) {
super();
this.name = name;
this.age = age;
} @Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("CatRequest.eat()"+name+"有"+age+"月大"); } public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} }
模拟工作线程取出请求,执行不同的业务
package com.yeepay.sxf.thread7;
/**
* 工作线程
* @author sxf
*
*/
public class Test { public static void main(String[] args) { //模拟线程取出不同的的请求包装
Request peRequest=new PersonRequest("尚晓飞", "汉堡");
Request catRequest=new CatRequest("黑猫警长", 3);
//不同的请求包装利用多态调用方法,实现不同的业务
peRequest.eat();
catRequest.eat();
} }
打印结果
PersonRequest.eat()尚晓飞吃掉汉堡
PersonRequest.fell()我吃饱了
CatRequest.eat()黑猫警长有3月大
多线程程序设计学习(9)worker pattern模式的更多相关文章
- 多线程程序设计学习(3)immutable pattern模式
Immutable pattern[坚不可摧模式] 一:immutable pattern的参与者--->immutable(不变的)参与者 1.1:immutable参与者是一个 ...
- 多线程程序设计学习(2)之single threaded execution pattern
Single Threaded Execution Pattern[独木桥模式] 一:single threaded execution pattern的参与者--->SharedResourc ...
- 多线程程序设计学习(6)Producer-Consumer模式
Producer-Consumer[生产消费者模式]一:Producer-Consumer pattern的参与者--->产品(蛋糕)--->通道(传递蛋糕的桌子)--->生产者线程 ...
- 多线程程序设计学习(5)balking模式和timed模式
Balking[返回模式]timed[超时模式]一:balking pattern的参与者--->GuardedObject(被警戒的对象) --->该模式的角色:模拟修改警戒对象的线程, ...
- 多线程程序设计学习(10)Future pattern
Future pattern[订单取货模式] 一:Future pattern的参与者--->Client(客户需求)--->Host(蛋糕门店)--->Data(票据和蛋糕的接口) ...
- 多线程程序设计学习(7)read-write lock pattern
Read-Write Lock Pattern[读写]一:Read-Write Lock Pattern的参与者--->读写锁--->数据(共享资源)--->读线程--->写线 ...
- 多线程程序设计学习(4)guarded suspension模式
Guarded Suspension[生产消费者模式] 一:guarded suspension的参与者--->guardedObject(被防卫)参与者 1.1该 ...
- 多线程程序设计学习(13)Active Object pattern
Active Object[接收异步消息的对象] 一:Active Object的参与者--->客户端线程(发起某种操作请求处理)--->代理角色(工头)--->实际执行者(工人)- ...
- 多线程程序设计学习(12)Thread-soecific storage pattern
Thread-Specific-Storage[线程保管箱] 一:Thread-Specific Storage的参与者--->记录日志的线程(ClientThread)--->负责获取不 ...
随机推荐
- WPF简单的口算案例
前几天在博客园,看到有博友利用Winform做了一个口算案例,于是我想把它移植在WPF程序中.Winform程序:http://www.cnblogs.com/ImYZF/p/3345452.html ...
- fedora -- java多版本切换
一般java开发时会下载多个版本的SDK,所以需要多个版本中进行切换 1. 设置JAVA_HOME环境变量需要打开.bashrc文件 2. 安装时使用alternatives将不同版本的java连接到 ...
- php生成xml的四种方法(转)
<?xml version="1.0" encoding="utf-8"?> <article> <item> <ti ...
- SVN 提交必填备注Commit
操作方法:在SVN的Repositories下,找到要配置的项目,在项目目录下找到hooks文件夹,在其下创建pre-commit.bat文件,把下面复制进去就可以了(无需重启,如果改动,保存bat文 ...
- python学习笔记29(python中堆的使用)
堆(heap):优先队列的一种,使用优先队列能够以任意顺序增加对象,并且能在任意时间(可能在增加对象的同时)找到(也可能是移除)最小元素,比用于列表中min的方法要高效. Python中并没有独立的堆 ...
- C#设计模式学习资料--外观模式
http://www.cf17.com/html/article/172.html http://blog.csdn.net/scucj/article/details/1374657 http:// ...
- 字符串截取 方法 String b=a.substring(0, a.indexOf("乘坐"));
String b=a.substring(0, a.indexOf("乘坐"));
- Extjs4.2布局——Ext.container.ViewportView
先贴出官方文档的关于此布局的描述:“ 一个专门的容器用于可视应用领域(浏览器窗口). Viewport渲染自身到网页的documet body区域, 并自动将自己调整到适合浏览器窗口的大小,在窗口大小 ...
- IOS 录像软件
http://iphone.91.com/tutorial/cjjc/140430/21683219.html
- cocos2dx Sprite setBlendFunc 使用颜色混合:加算,减算
说明: 图片的混色是游戏的特效的特破口,应用的好,可以大量减少图片的使用量,有专门的介绍资料... setBlendFunc 相关参数,有多种组合方式,需要经验的积累 http://blog.csd ...