Thread-Per-Message模式

Thread-Per-Message 模式

所谓Per,就是“每~”的意思。因此,Thread-Per-Message直译过来就是“每个消息一个线程”的意思。Message在这里可以理解为“命令”或“请求”。为每个命令或请求新分配一个线程,由这个线程来执行处理。

在Thread-Per-Message 模式中,消息的“委托端”和“执行端”是不同的线程。消息的委托端线程会告诉执行端线程“这项工作就交给你了”。

示例程序

在示例程序中,Main类委托Host类来显示字符。Host类会创建并启动一个线程,来处理该委托。启动的线程使用Helper类来执行实际的显示。

类的一览表

名字 说明
Main 向Host发送字符显示请求的类
Host 针对请求创建线程的类
Helper 提供字符显示功能的被动类

Main类

Main类会先创建一个Host类的实例,然后调用Host的request方法。

1
2
3
4
5
6
7
8
9
10
11
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");

}
}

Host类

1
2
3
4
5
6
7
8
9
10
11
12
13
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");
}
}

Helper类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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.println(c);
}
System.out.println("");
System.out.println(" handle(" + count + ", " + c + ") end");
}

private void slowly() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
0%