1.什么是Thread-Per-Message

Thread-Per-Message的意思是为每一个消息的处理开辟一个线程使得消息能够以并发的方式进行处理,从而提高系统整体的吞吐能力。这就好比电话接线员一样,收到的每一个电话投诉或者业务处理请求,都会提交对应的工单,然后交由对应的工作人员来处理。

2.每个任务一个线程

在本节中,我们首先实现一个简单的Thread-Per-Message, 但是在开发中不建议采用这种方式,在后文中笔者会对此进行详细解释。

  1. public class Request {
  2. private final String business;
  3. public Request(String business) {
  4. this.business = business;
  5. }
  6. @Override
  7. public String toString() {
  8. return "Request{" +
  9. "business='" + business + '\'' +
  10. '}';
  11. }
  12. }

客户提交的任何业务受理请求都会被封装成Request对象。
TaskHandler代码如所示。

  1. import java.util.concurrent.TimeUnit;
  2. public class TaskHandler implements Runnable{
  3. // 需要处理的Request请求
  4. private final Request request;
  5. public TaskHandler(Request request) {
  6. this.request = request;
  7. }
  8. @Override
  9. public void run() {
  10. System.out.println("Begin handle " + request);
  11. slowly();
  12. System.out.println("End handle " + request);
  13. }
  14. // 模式处理
  15. private void slowly() {
  16. try {
  17. TimeUnit.SECONDS.sleep(1);
  18. } catch (InterruptedException e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. }

Task Handler代表了每一个工作人员接收到任务后的处理逻辑。
Operator代码如所示。

  1. public class Operator {
  2. public void call(String business) {
  3. // 为每个请求创建一个线程去处理
  4. TaskHandler taskHandler = new TaskHandler(new Request(business));
  5. new Thread(taskHandler).start();
  6. }
  7. }

3.多用户的网络聊天

3.1服务端程序