Thread-Per-Message的意思是为每一个消息的处理开辟一个线程使得消息能够以并发的方式进行处理,从而提高系统整体的吞吐能力。例如:电话接线员一样,收到的每一个电话投诉或者业务处理请求,都会提交对应的工单,然后交由对应的工作人员来处理。
一个请求过来,就会有一个线程为当前请求服务
模式特点
1.提高响应性,缩短延迟时间
当handle方法操作非常耗时的时候可以使用该模式。如果handle方法执行时间比创建一个新线程的时间还短,那就没必要了
2.操作顺序没有要求
handle方法并不一定是按照request方法的调用顺序来执行的。
3.适用于不需要返回值
request方法不会等待handle方法的执行结束。所以request得不到handle执行的结果
public class Message {
private final String name;
public Message(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class RequestHandler {
private static ExecutorService executor = Executors.newFixedThreadPool(5);
public void request(Message message){
executor.execute(()->{
try {
System.out.println("The message will be handle by " + Thread.currentThread().getName() + " " + message.getName());
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
// new Thread(()->{
// try {
// Thread.sleep(1000);
// System.out.println("The message will be handle by " + Thread.currentThread().getName());
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// },name).start();
}
public void shutdown(){
executor.shutdown();
}
}
public class Client {
public static void main(String args[]){
final RequestHandler handler = new RequestHandler();
IntStream.rangeClosed(1,10).forEach(i-> handler.request(new Message(String.valueOf(i))));
handler.shutdown();
}
}