Java网络编程:同异步、是否阻塞与网络通信线程池

Java网络编程:同异步、是否阻塞与网络通信线程池

一、同步与异步、阻塞与非阻塞
1.1 同步通信机制

男孩向心仪的女孩表白,女孩子可能会陷入沉思,她要好好考虑是否接收表白,男孩子只需要默默地等待,这就类似于同步的通信机制,发出表白的男孩子就是发出请求的一方,在同步通信机制下,接收到请求的一方它需要花费时间去处理请求,处理完毕做出结束,整个通信才会返回

在这里插入图片描述

1.2 异步通信机制

女孩可能需要几天时间去考虑,过几天才发消息回复,这时候调用便结束,这时候女孩子可以回去思考了,当调用返回后请求方还是不知道调用结束,需要等待接收方过后的返回,这时候便是异步通信机制

在这里插入图片描述

1.3 阻塞式调用

男孩表白后,不断女孩子是沉思还是过几天回复,他都一直在一心意思等回复,什么都干不了,这种请求方在等待调用结束收到之前什么任务都不再处理,只在等待结果,这便是阻塞式调用

在这里插入图片描述

1.4 非阻塞式调用

男孩表白后,不理会女孩的结束,依旧去打游戏、学习、运动,这种请求方不需要等待调用结束返回,依旧可以去处理其他任务,这便是非阻塞式调用

在这里插入图片描述

1.5 两两组合
  • 同步阻塞:男孩向女孩表白,女孩陷入思考,去处理,男孩一心一意等待结果
  • 同步非阻塞:男孩向女孩表白,女孩陷入思考,去处理,男孩去学习运动,处理其他任务
  • 异步阻塞:男孩向女孩表白,女孩让男孩回去等待,过后再返回结果,男孩一心一意等待结束
  • 异步非阻塞:男孩向女孩表白,女孩让男孩回去等待,过后再返回结果,男孩去学习运动,处理其他任务

二、同步线程池
2.1 处理多个请求

服务器在很短时间内从不客户端收到很多请求,可以采用多个线程并发处理,例如银行可以多开几个窗口处理业务,但是多线程处理中处理浪费,如果我们每收到一个请求就为它创建一个线程,处理完毕后就回收,这里不断地创建新的线程,回收旧线程,这些操作占用比较多的系统资源,系统的总体系统资源也限制了创建线程的数目,这时候便需要采用复用线程,保持一定数量的一组线程,重复使用它们,处理完一个任务后便继续处理下一个任务,不进行回收

在这里插入图片描述

2.2 Java提供的线程池

ExecutorService接口,通过实现改接口来进行线程池的管理,对于一个线程池来说,当接收到任务后就派空闲的线程去处理任务,Java中常见的两种任务为Runnable与Callable,任务提交到线程池处理完毕之后,我们就在线程池中收到一个Future对象,

  • Runnable接口一般指没有特定返回值的任务,例如我们提交这个任务返回值为void的时候,我们就可以使用Runnable
  • Callable接口类似于运算,需要返回值,例如我们需要处理完任务后返回一个特定值,我们就可以使用Callable
  • Future对象代表线程处理完任务后任务的状态,一般提供接口让我们去互动,例如isDone()判断任务是否完成,如果完成了可以利用get()去获取任务结果
    在这里插入图片描述
2.3 Java提供的创建线程池的方法

Executors类,提供各种静态方法与函数用来直接帮我们创建常用的线程池

  • newSingleThreadExecutor:这个线程池里面永远只有一个线程,复用唯一的线程
  • newFixedThreadPool:生成线程池,可以设置线程数量,这个数量设定后便不再改变
  • newCachedThreadPool:提交新任务时,恰好有空闲的线程就会来处理,恰好没空闲时的线程时,这时候就会创建一个线程,放入线程池中
  • newScheduledThreadPool:提交任务时可以说明任务不需要马上处理,可设定某个时间,某个频率

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值