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