Thread-Per-Message的意思是为每一个消息的处理开辟一个线程使得消息能够以并发的方式进行处理,从而提高系统整体的吞吐能力。相当于一个请求过来,就会有一个线程为当前请求服务。
特点:
-
提升系统的响应,缩短响应时间
当请求的资源比较耗时的时候,可以采用这个方法,当响应的时间比新创建一个线程还短的时候就没有必要使用。
-
没有返回值
无需等待实行的结果
-
没有顺序可言
请求没有先后的顺序性
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();
}
});
public void shutdown(){
executor.shutdown();
}
}
public class PreThreadClient {
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();
}
}