【Thread-Per-Message模式】每个消息一个线程。为每个命令或请求分配一个线程,由这个线程来执行处理。
在Thread-Per-Message模式中,消息的委托端和执行端是不同的线程。消息的委托端线程会告诉执行端线程“这项工作就交给你了”
【示例程序】
名字 | 说明 |
Main | 向Host发送字符显示请求的类 |
Host | 针对请求创建线程的类 |
Helper | 提供字符显示功能的被动类 |
Main类
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类
Host类的request方法新启动了一个线程,实际操作将由该线程来执行。
Java的匿名内部类创建Thread的子类实例,并使用该实例来启动线程。
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类
public class Helper {
public void handle(int count,int 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");
}
public void slowly() {
try {
Thread.sleep(100);
} catch(InterruptedException e) {}
}
}
【Thread-Per-Message模式中登场角色】
1 Client委托人
Client角色会向Host角色发出请求(request),但是并不知道Host角色是如何实现该请求的。
2 Host
Host角色收到Client角色的请求后,会新创建并启动一个线程。新创建的线程将使用Helper角色来处理请求。
3 Helper
Helper角色为Host角色提供请求处理的功能。Host角色创建的新线程会利用Helper角色。
【进程与线程】
1.进程与线程最大的区别就是内存是否共享。
每个进程都拥有彼此独立的内存空间,一个进程不可以擅自读取、写入其他进程的内存。由于进程的内存空间是彼此独立的,所以一个进程无须担心被其他进程破坏。
线程之间共享内存。我们经常让一个线程向内存中写入内容,来供其它线程读取。共享内存就是共享实例的意思,Java的实例分配在内存上,可由多个线程进行读写。