网络编程的本质是进程间通信

2 通信的基础是IO模型

输入流

Java 网络编程实战(二) - Unix的I/O模型解析_java

文件,Java对象,字符串都可以是数据源

输出流

Java 网络编程实战(二) - Unix的I/O模型解析_线程池_02

3 java.io 家族

Java 网络编程实战(二) - Unix的I/O模型解析_java_03

字符流

Java 网络编程实战(二) - Unix的I/O模型解析_线程池_04

Java 网络编程实战(二) - Unix的I/O模型解析_线程池_05

字节流

Java 网络编程实战(二) - Unix的I/O模型解析_java_06

Java 网络编程实战(二) - Unix的I/O模型解析_线程池_07

4 设计模式 - 装饰器模式

Java 网络编程实战(二) - Unix的I/O模型解析_java_08

  • 奶茶店里面的装饰器模式(珍珠只是装饰)
    Java 网络编程实战(二) - Unix的I/O模型解析_非阻塞_09

Socket也是一种数据源

  • Socket是网络通信的端点
    Java 网络编程实战(二) - Unix的I/O模型解析_线程池_10

Unix中的Socket是什么

◆ Unix系统中一切皆是文件

◆ 文件描述符表是已打开文件的索引

◆ 每个进程都会维护一个文件描述符表

通过socket发送数据

Java 网络编程实战(二) - Unix的I/O模型解析_线程池_11

同步/异步/阻塞/非阻塞

Java 网络编程实战(二) - Unix的I/O模型解析_线程池_12

  • 排列组合Java 网络编程实战(二) - Unix的I/O模型解析_线程池_13

同步

面对面表白女生时为同步,持续性等待!

Java 网络编程实战(二) - Unix的I/O模型解析_线程池_14

A线程:

A要去做事情A1,A2, A3。

如果A1正在执行的情况下A2, A3都不能执行,这叫做同步,也叫阻塞。A2必须等A1执

行完毕之后才能执行。

异步

女孩子考虑考虑,下次告诉你

Java 网络编程实战(二) - Unix的I/O模型解析_线程池_15

Java 网络编程实战(二) - Unix的I/O模型解析_非阻塞_16

A1正在执行的情况下,A2和A3也可以执行。这叫做异步、非阻塞。

阻塞调用

表白后,茶不思饭不想啥都不干就等待!

Java 网络编程实战(二) - Unix的I/O模型解析_线程池_17

非阻塞调用

  • 表白后,该干嘛干嘛
    Java 网络编程实战(二) - Unix的I/O模型解析_线程池_18

等待结果前,调用方的状态

同步阻塞

  • 一直等待,不做别的事

Java 网络编程实战(二) - Unix的I/O模型解析_java_19

同步非阻塞

等待时,还想着自己的bug没解决呢!

Java 网络编程实战(二) - Unix的I/O模型解析_非阻塞_20

异步阻塞

表白后离开,等待手机消息,但茶不思饭不想

Java 网络编程实战(二) - Unix的I/O模型解析_线程池_21

异步非阻塞

  • 离开后,该干嘛干嘛
    Java 网络编程实战(二) - Unix的I/O模型解析_线程池_22

复用线程 -线程池



java提供的线程池
Java 网络编程实战(二) - Unix的I/O模型解析_非阻塞_23



java提供的创建线程池的方法
Java 网络编程实战(二) - Unix的I/O模型解析_java_24