java基础总结(面试高频问题)六:java进程间,线程间通信方式,socket通信

1:进程间通信的方式:
(1)管道:管道是一种半双工的通信方式,数据只能单向流动,且只能在具有亲缘关系的进程间通信;
半双工:数据传输可以在一个信号载体的两个双向上传输,但是不能同时传输,某一时刻只能朝一个方向传输;
(2)命名管道:半双工的通讯方式,可以在非亲缘关系的进程间通信;
(3)信号:用于通知进程有某种事件发生;
(4)信号量:他是一个计数器,可以控制多个进程多共享资源的访问。常被作为锁来使用。防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为不同进程间或同一进程下不同线程间的同步手段;
(5)消息队列:消息队列是消息的链接表,被赋予写操作的进程可以向消息队列中添加消息,被赋予读操作的进程可以向消息队列中读取消息。消息队列克服了信号承载数据较少的缺陷;
(6)共享内存:使得多个进程访问同一块内存空间,效率高,速度快。往往配合其他通信机制,比如信号量来一起使用,达到进程间同步或互斥的效果;
(7)内存映射:内存映射允许任意多个进程间通信,每一个使用该机制的进程通过把一个共享文件映射到自己的进程地址空间来实现;
(8)socket:最常用的进程间通信方式,不同的是,它可以实现不同机器之间的进程间通信;

2:线程间通信方式:
(1)synchronized同步:
其原理就是保证线程的安全,当一个线程在访问主内存时,其他线程不能访问,等待他结束;
(2)wait/notify/notifyAll机制:
线程A和线程B之间,当线程B在工作时,线程A使用wait方法进入阻塞。直到线程B工作结束,线程B调用notify方法唤醒线程A进行工作;
(3)利用volatile:
volatile修饰的变量直接存在主内存当中,子线程对该对象的读写都直接写往主内存中,不需要再往工作内存中复制一份。因此,volatile保证了多个线程的可见性,即只要被修改,其他线程读取到的一定是最新值;
(4)PipedInputStream、PipedOutputStream:
利用流的形式来进行线程间的通信,因为java中流的传输是单向的,所以在两个线程中分别建立一个输入流一个输出流来完成通信;

3:Socket通信详解:
(1)两台计算机之间进行通讯需要三个条件:IP地址,通讯协议,端口号
(2)TCP/IP协议:TCP是传输控制协议,IP是互联网协议
(3)TCP/IP的五层模型:
应用层:HTTP、FTP、SMTP、Telnet等
传输层:TCP/IP
网络层:
数据链路层:
物理层:网线、双绞线、网卡等
(4)每台计算机的IP地址都不同,端口号范围是0—65536,其中0—1023为系统保留,用户不可使用;
(5) Socket原理机制:通信的两端都有Socket,数据在两个Socket间通过IO流进行传输;
(6)TCP协议(三次握手,四次挥手):
<1>TCP协议是面向连接的、可靠的、有序的、以字节流的方式发送数据,通过三次握手方式建立连接,形成传输数据的通道,在连接中进行大量数据的传输,效率会稍低。
<2>Socket(TCP)通信的整体步骤
① 创建ServerSocket和Socket
② 打开连接到Socket的输入/输出流
③ 按照协议对Socket进行读/写操作
④ 关闭输入输出流、关闭Socket
分开描述:
服务器端:
① 创建ServerSocket对象,绑定监听端口
② 通过accept()方法监听客户端请求
③ 连接建立后,通过输入流读取客户端发送的请求信息
④ 通过输出流向客户端发送响应信息
⑤ 关闭相关资源
客户端:
① 创建Socket对象,指明需要连接的服务器的地址和端口号
② 连接建立后,通过输出流想服务器端发送请求信息
③ 通过输入流获取服务器响应的信息
④ 关闭响应资源

(7)UDP协议:
<1>UDP协议(用户数据报协议)是无连接的、不可靠的、无序的,速度快,进行数据传输时,首先将要传输的数据定义成数据报(Datagram),大小限制在64k,在数据报中指明数据要达到的Socket(主机地址和端口号),然后再将数据报发送出去;
DatagramPacket类:表示数据报包
DatagramSocket类:进行端到端通信的类
<2>
服务器端:
① 创建DatagramSocket,指定端口号
② 创建DatagramPacket
③ 接受客户端发送的数据信息
④ 读取数据
客户端:
① 定义发送信息
② 创建DatagramPacket,包含将要发送的信息
③ 创建DatagramSocket
④ 发送数据

(8)三次握手,四次挥手详解:
添加链接描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值