Java多线程Thread-Per-Message模式

概述

这项工作就交给你了。把工作交给别人处理后,就可以返回继续做自己的工作。

示例程序

Main 向Host发送字符显示请求的类
Host  针对请求创建线程的类
Helper 提供字符显示功能的被动类
Main 类
public class Main {
  public static void main(String[] args) {
    Host host = new Host();
    host.request(10, ‘A');
    host.request(20, 'B');
    host.request(30, 'C');
    System.out.println("main END");
  }
}

Host 类

Host类的request方法启动了一个线程。实际操作将由该线程来执行。

public class Host {
  private final Helper helper = new Helper();
  public void request(final int count, final char c) {
    System.out.println("   request(" + count + ", " + c + ") BEGIN");
    new Thread() {
      public void run() {
        helper.handle(count, c);
      }
    }.start();
    System.out.println("  request(" + count + ", " + c + ") END");
  }
}
Helper 类
public class Helper {
  public void handle(int count, char c) {
    System.out.println("   handle(" + count + ", " + ") BEGIN");
    for (int i = 0; i < count; i++ ) {
      slowly();
      System.out.print(c);
    }
    System.out.println("");
    System.out.print("      handle(" + count + ", " + c + ")  END";
  }
  
  private void slowly() {
    try {
      Thread.sleep(100);
    } catch (InterruptedException e) {}
  }
}

Thread-Per-Message 模式中的登场角色

  • Client (委托人)
    Client 角色会向Host 角色发出请求(request),但是并不知道是如何实现该请求的。在示例程序中,由Main类扮演。
  • Host
    Host角色收到Client角色的请求(request)之后,会新创建并启动一个线程。新创建的线程将使用Helper角色来“处理”(handle)请求,由 Host类扮演。
  • Helper(助手)
    Helper角色为Host角色提供请求处理的功能。Host角色创建新的线程会利用Helper角色。在示例程序中。由Helper类扮演。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,288评论 19 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,661评论 1 92
  • 让我看看,上一篇软件推荐还是4月20日的事情了 最近一直在P图大家一定有点审美疲劳了吧。 其实一直都有童鞋问到过我...
    野鹿志阅读 520评论 0 14
  • 命运有自己的安排 我看不透也不敢看透 我有自己的梦想 只要还没垮心中还有目标 我想命运也允许我去追
    掉毛的老公阅读 130评论 0 0
  • 我走过山时,山不说话, 我路过海时,海不说话, 小毛驴滴滴答答,倚天剑伴我走天涯。 大家都说我因为爱着杨过大侠,才...
    mountainous阅读 172评论 0 0