一、Thread-Per-Message设计模式介绍
Thread-Per-Message模式是说为每个请求都分配一个线程,由这个线程来执行处理,使得消息能够并发(但是注意:线程的创建是有限的,可以使用线程池来处理,超过数量则加入等待队列),这里包含两个角色,请求的提交线程和请求的执行线程。
二、场景模拟
就好比电话接线员一样,每一个电话投诉或业务处理,都会有对应的人员来处理,若打不进,则等待
三、Java代码实现(使用Executors框架创建线程池来创建线程)
①.Message类
package chapter2.threadpermessage;
/**
* @author czd
*/
public class Message {
private String message;
public Message(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
②.MessageHandler类
package chapter2.threadpermessage;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @author czd
*/
public class MessageHandler {
public void request(final Message message){
ExecutorService pool = Executors.newFixedThreadPool(5);
pool.execute(new Runnable() {
@Override
public void run() {
String result = message.getMessage();
try {
Thread.sleep(100);
System.out.println(Thread.currentThread().getName() + ">>>>>" + result);
}catch (Exception e){
e.printStackTrace();
}
}
});
}
}
③.ThreadPerMessageTest 类
package chapter2.threadpermessage;
/**
* @author czd
*/
public class ThreadPerMessageTest {
public static void main(String[] args) {
MessageHandler messageHandler = new MessageHandler();
for (int i = 0; i < 5; i++){
messageHandler.request(new Message("信息:" + i));
}
}
}
输出结果
四、总结
Thread-Per-Message模式可以提高程序的响应性,但是并不能保证操作的顺序,而且没有返回值。一般用于简单服务器实现,当服务器主线程收到客户端的请求之后就创建一个新的线程去处理客户端的请求,而服务器主线程则返回继续接收客户端请求。