读《图解java多线程设计模式》总结--Thread-Per-Message

1,从名字上看,就是每一条信息一条线程,这里的信息可以看作是一次请求,相当于对于每一次请求都会独立开启一条线程来处理

2,适用范围,对于某些请求由于处理时间较长,但又不需要等待返回结果,也没有要求处理一定要按某种顺序进行,此时就适合用Thread-Per-Message

3,实现方式,这里有3个概念,第一个是Client表示发起请求端,第二个是Host,可以把他看作是接受请求,接受后为每一个请求独立开启一条线程,然后不等待直接返回,第三是Helper这个可以看作是处理请求的实际对象,真正对请求的处理在该对象里面进行。

4,代码实现

1)定义Helper,接收请求,显示处理这个,这里就是单纯的显示一下线程名。具体如下:

package threadpermessage.study;

public class Helper {

    public void handle(String requestName)
    {
        System.out.println("handle "+Thread.currentThread().getName()+" request "+requestName);
    }
}

 

2)定义Host,接收请求,为每一个请求启动一条新线程来调用Helper对象处理方法,然后不用等待处理完成直接返回

package threadpermessage.study;

public class Host {

    Helper helper=new Helper();
    public void request(String requestName)
    {
        System.out.println("get request:"+ requestName);
         new Thread(){
             public void run()
             {
                 helper.handle(requestName);
             }
         }.start();
        System.out.println("get request:"+ requestName+ " and retrun");

    }
}

 

3)定义Cliet,向Host发送3次请求

 

package threadpermessage.study;

public class Client {
    public static void main(String[] args) {
        Host host=new Host();
        host.request("request1");
        host.request("request2");
        host.request("request3");
    }
}

 

4)运行结果,可以看多Host对象接收请求后是直接返回的,而每条新线程处理结果是异步显示的,也就是说Host启动完线程后,他的任务就结束了,至于线程如何处理,那就是该线程内部的事情。而且每个线程处理都是独立的,相互没有任何顺序关系。

get request:request1
get request:request1 and retrun
get request:request2
get request:request2 and retrun
get request:request3
get request:request3 and retrun
handle Thread-1 request request2
handle Thread-0 request request1
handle Thread-2 request request3

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值