定义:
在Thread-Per-Message模式中,消息的委托者和执行者是不同线程的,消息的委托者把消息的交给执行者去执行。
引例
名字 | 说明 |
mian | 向host发送 字符显示请求的类 |
host | 针对请求创建的类 |
helper | 提供字符显示功能的被动类 |
public class Main {
public static void main(String[] args) {
System.out.println("main BEGIN");
Host host = new Host();
host.request(10, 'A');
host.request(20, 'B');
host.request(30, 'C');
System.out.println("main END");
}
}
public class Helper {
public void handle(int count, char c) {
System.out.println(" handle(" + count + ", " + c + ") BEGIN");
for (int i = 0; i < count; i++) {
slowly();
System.out.print(c);
}
System.out.println("");
System.out.println(" handle(" + count + ", " + c + ") END");
}
private void slowly() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
public class Host {
private final Helper helper = new Helper();
public void request(final int count, final char c) {
System.out.println(" request(" + count + ", " + c + ") BEGIN");
new Thread() {
public void run() {
helper.handle(count, c);
}
}.start();
System.out.println(" request(" + count + ", " + c + ") END");
}
}
main BEGIN
request(10, A) BEGIN
request(10, A) END
handle(10, A) BEGIN
request(20, B) BEGIN
request(20, B) END
handle(20, B) BEGIN
request(30, C) BEGIN
request(30, C) END
main END
handle(30, C) BEGIN
ABCCBACABCABACBBCAACBBCACBAACB
handle(10, A) END
BCCBBCCBCBBC
Thread-Per-Message模式角色
client:委托人角色向host角色发出请求。
host:host角色收到client角色请求后,会创建并启动一个线程。先创建的线程使用helper角色处理请求
helper(助手):helper角色为host角色提供处理功能。
什么时候使用
适用于操作顺序没有要求
适用于不需要返回值时
适用于服务器
调用方法+启动线程--发送消息