多线程程序设计学习(8)Thread-Per-Message
Thread-Per-Message【这个工作交给你模式】
一:Thread-Per-Message的参与者
--->Client(委托人)
--->host(中介开线程)
--->hepler(真正工作的工人)
二:Thread-Per-Message模式什么时候使用
--->提升响应时间,降低延迟时间
--->适合在操作顺序无所谓的时候
--->(委托人)不需要返回值的时候
--->应用在服务器的制作(我提供原材料,你加工,我不关心结果)
--->调用方法+启动线程--->完成某件事情(可以作为触发器)
三:Thread-Per-Message思考
--->进程和线程的区别
==>进程是工作在操作系统上的,线程是工作在进程中的。
==>进程的内存空间是独立的,不同的进程彼此独立,互不干扰
==>线程的内存空间是共享的,多个线程可以访问改写内存上的同一个对象
==>进程切换比较繁重,线程切换比较轻松。所以密切相关的事件,线程更合适
四进阶说明
--->java的内存模型中,将内存分为主存储器和工作内存两种。可让线程共享的,只有主存储器部分。
--->匿名内部类
==>匿名内部类是将类的声明与建立实例的操作写在一起。
==>虽然写在一起,也不是在执行方法时才建立出类文件。匿名内部类和一般类一样,都会在编译时生成类文件
==>匿名内部类中,用到方法的参数或局部变量时,必须将变量声明成final.如果不是,则编译错误
真正的工人
1 package com.yeepay.sxf.thread7; 2 /** 3 * 执行任务的工人类 4 * @author sxf 5 * 6 */ 7 public class Helper { 8 9 //任务就是将a打印b遍 10 public void handle(String a,int b) throws InterruptedException{ 11 System.out.println(Thread.currentThread().getName()+"打印【"+a+"】开始"); 12 for(int i=0;i<b;i++){ 13 System.out.println("打印["+a+"]第["+(i+1)+"]遍"); 14 Thread.sleep(1000); 15 } 16 System.out.println(Thread.currentThread().getName()+"打印【"+a+"】结束"); 17 18 } 19 }
找工人开线程
1 package com.yeepay.sxf.thread7; 2 /** 3 * 分发命令,找线程进行工作的类 4 * @author sxf 5 * 6 */ 7 public class Host { 8 //真正工作的工人 9 private final Helper helper=new Helper(); 10 11 //启动新线程,去工作的类 12 public void request(final String a,final int b){ 13 14 System.out.println("request begin==>"+a); 15 16 //匿名内部类 17 new Thread(){ 18 19 //线程体 20 @Override 21 public void run() { 22 23 try { 24 //真正执行的工作 25 helper.handle(a, b); 26 } catch (InterruptedException e) { 27 // TODO Auto-generated catch block 28 e.printStackTrace(); 29 } 30 } 31 32 }.start(); 33 34 35 System.out.println("request end==>"+a); 36 } 37 }
主线程
1 package com.yeepay.sxf.thread7; 2 /** 3 * 委托线程 4 * @author sxf 5 * 6 */ 7 public class Test { 8 9 public static void main(String[] args) { 10 System.out.println("Test.main()主线程begin"); 11 Host host=new Host(); 12 host.request("尚晓飞", 10); 13 host.request("尚小帅", 10); 14 host.request("尚小燕", 10); 15 System.out.println("Test.main()主线程end"); 16 } 17 18 }