多线程程序设计学习(8)Thread-Per-Message

简介: Thread-Per-Message【这个工作交给你模式】一:Thread-Per-Message的参与者--->Client(委托人)--->host(中介开线程)--->hepler(真正工作的工人)       二: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

 

相关文章
|
10月前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
245 10
|
监控 Java 调度
【Java学习】多线程&JUC万字超详解
本文详细介绍了多线程的概念和三种实现方式,还有一些常见的成员方法,CPU的调动方式,多线程的生命周期,还有线程安全问题,锁和死锁的概念,以及等待唤醒机制,阻塞队列,多线程的六种状态,线程池等
1134 6
【Java学习】多线程&JUC万字超详解
|
NoSQL Redis
Redis系列学习文章分享---第五篇(Redis实战篇--优惠券秒杀,全局唯一id 添加优惠券 实现秒杀下单 库存超卖问题分析 乐观锁解决超卖 实现一人一单功能 集群下的线程并发安全问题)
Redis系列学习文章分享---第五篇(Redis实战篇--优惠券秒杀,全局唯一id 添加优惠券 实现秒杀下单 库存超卖问题分析 乐观锁解决超卖 实现一人一单功能 集群下的线程并发安全问题)
409 0
|
监控 Java API
Java 程序设计 第八章 线程
Java 程序设计 第八章 线程
107 1
【JAVA学习之路 | 提高篇】进程与线程(Thread)
【JAVA学习之路 | 提高篇】进程与线程(Thread)
|
调度 Python
Python多线程学习优质方法分享
Python多线程学习优质方法分享
88 0
|
安全 API C++
逆向学习Windows篇:C++中多线程的使用和回调函数的实现
逆向学习Windows篇:C++中多线程的使用和回调函数的实现
639 0
|
Java
Java线程学习经典例子-读写者演示
Java线程学习经典例子-读写者演示
62 0
【JAVA学习之路 | 提高篇】线程的通信
【JAVA学习之路 | 提高篇】线程的通信
【JAVA学习之路 | 提高篇】线程安全问题及解决
【JAVA学习之路 | 提高篇】线程安全问题及解决

热门文章

最新文章