zoukankan      html  css  js  c++  java
  • 多线程程序设计学习(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 }
    View Code

    找工人开线程

     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 }
    View Code

    主线程

     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 }
    View Code
  • 相关阅读:
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1068:与指定数字相同的数的个数
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1068:与指定数字相同的数的个数
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1067:整数的个数
    SSLZYC 2405 巧克力
    SSLZYC 2404 上学
    SSLZYC 2403 蜡烛
    SSLZYC 2402 世界语
    SSLZYC 2124 涂色
    SSLZYC 2391 数列
    SSLZYC 洛谷 P1498 南蛮图腾
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/4662615.html
Copyright © 2011-2022 走看看