工人线程(worker thread)会逐个取回工作并进行处理。当所有工作全部完成后,工人线程会等待新的工作到来。
示例
ClientThread类的线程会向Channel类发送工作请求(委托)。
Channel类的实例雇用了五个工人线程(WorkerThread)进行工作。所有工人线程都在等待工作请求的到来。
工作请求到来后,工人线程会从Channel那里获取一项工作请求并开始工作。工作完成后,工人线程会回到Channel那里等待下一项工作请求。
类图
时序图
Main.java
1 | public class Main { |
ClientThread.java
- 创建Request的实例
- 将该实例传递给Channel类的putRequest方法
1 | import java.util.Random; |
Request.java
1 | import java.util.Random; |
Channel.java
1 | public class Channel { |
WorkerThread.java
- 调用takeRequest方法从Channel的实例中获取一个Request的实例
- 调用Request的实例的execute方法
1 | public class WorkerThread extends Thread { |
运行结果
1 | Worker-3 executes [ Request from Bobby No.0 ] |
登场角色
Client(委托者)
Client角色创建表示工作请求的Request角色并将其传递给Channel角色。在示例程序中,由ClientThread类扮演此角色。
Channel(通信线路)
Channel角色接收来自于Client角色的Request角色,并将其传递给Worker角色。在示例程序中,由Channel类扮演此角色。
Worker(工人)
Worker角色从Channel角色中获取Request角色,并进行工作。当一项工作完成后,它会继续去获取另外的Request角色。在示例程序中,由WorkerThread类扮演此角色。
Request(请求)
Request角色是表示工作的角色。Request角色中保存了进行工作所必需的信息。在示例程序中,由Request类扮演此角色。