并发编程之Thread-pre-message design pattern

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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值