资讯专栏INFORMATION COLUMN

Java多线程基础(九)——Thread-Per-Message模式

Forest10 / 3127人阅读

摘要:一定义模式是指每个一个线程,可以理解成消息命令或者请求。类定义类定义执行三模式讲解模式的角色如下委托人参与者参与者会对参与者送出请求。参与者参与者接受来自的请求,然后建立新的线程处理它。帮助者参与者实际处理请求的。

一、定义

Thread-Per-Message模式是指每个message一个线程,message可以理解成“消息”、“命令”或者“请求”。每一个message都会分配一个线程,由这个线程执行工作,使用Thread-Per-Message Pattern时,“委托消息的一端”与“执行消息的一端”回会是不同的线程。

二、模式案例

该案例中,由Host分发请求,每一个请求分发一个新的线程进行处理。

Host类定义:

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 + ", " + c + ") BEGIN");
        for (int i = 0; i < count; i++) {
            slowly();
            System.out.print(c);
        }
        System.out.println("");
        System.out.println("        handle(" + count + ", " + c + ") END");
    }
    private void slowly() {
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
        }
    }
}

执行:

public class Main {
    public static void main(String[] args) {
        System.out.println("main BEGIN");
        Host host = new Host();
        host.request(10, "A");
        host.request(20, "B");
        host.request(30, "C");
        System.out.println("main END");
    }
}
三、模式讲解

Thread-Per-Message模式的角色如下:

Client(委托人)参与者

Client参与者会对Host参与者送出请求(Request)。上述案例中,Client参与者就是Main类。

Host参与者

Host参与者接受来自Client的请求,然后建立新的线程处理它。

Helper(帮助者)参与者

Helper实际处理请求的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71512.html

相关文章

  • Java线程基础(十)——Work Thread模式

    摘要:通道参与者参与者保存请求队列,同时会预创建线程。注启动线程是一项繁重的工作,模式预先创建一批线程,可以重复使用线程,达到资源再利用提升性能的目的。 一、定义 Work Thread模式和Thread-Per-Message模式类似,Thread-Per-Message每次都创建一个新的线程处理请求,而Work Thread模式预先会创建一个线程池(Thread Pool),每次从线程...

    xuweijian 评论0 收藏0
  • Java线程基础(十一)——Future模式

    摘要:一定义模式用来获取线程的执行结果。案例中的类就是参与者参与者接受请求,然后创建线程进行异步处理。参与者会立即返回以的形式。虚拟数据参与者是用来统一代表参与者与参与者。 一、定义 Future模式用来获取线程的执行结果。在Thread-Per-Message模式中,如果调用一个线程异步执行任务,没有办法获取到返回值,就像:host.request(10,A);而Future模式送出请求后...

    tinyq 评论0 收藏0
  • Java学习路线总结,搬砖工逆袭Java架构师(全网最强)

    摘要:哪吒社区技能树打卡打卡贴函数式接口简介领域优质创作者哪吒公众号作者架构师奋斗者扫描主页左侧二维码,加入群聊,一起学习一起进步欢迎点赞收藏留言前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干 ? 哪吒社区Java技能树打卡 【打卡贴 day2...

    Scorpion 评论0 收藏0
  • ()java线程之CyclicBarrier

    摘要:因为该在释放等待线程后可以重用,所以称它为循环的。若在继续所有参与线程之前更新共享状态,此屏障操作很有用。返回要求启动此的参与者数目。查询此屏障是否处于损坏状态。将屏障重置为其初始状态。 本人邮箱: 欢迎转载,转载请注明网址 http://blog.csdn.net/tianshi_kcogithub: https://github.com/kco1989/kco代码已经全部托管git...

    lingdududu 评论0 收藏0
  • 一名3年工作经验的java程序员应该具备的职业技能

    摘要:一名年工作经验的程序员应该具备的技能,这可能是程序员们比较关心的内容。数据结构和算法分析数据结构和算法分析,对于一名程序员来说,会比不会好而且在工作中能派上用场。 一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容。我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价、拿到的薪水势必也越高。 1、基本语法 这包括...

    renweihub 评论0 收藏0

发表评论

0条评论

Forest10

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<