1.synchronized 同步锁
同步方法:
成员|静态
简单,但是锁的范围一般可能较大,效率低
同步块
类的class:相当于锁了类的整个信息|所有对象
this:锁当前对象,锁了这个对象的所有资源
资源:一般锁不变的内容--对象地址
锁的范围太大效率低,锁的范围太小可能锁不住
锁一定要锁不变的内容
死锁:
需要避免锁使用的过于频繁,遇到对象无法释放的情况,否则出现死锁的问题
2.线程通信(生产者消费者模式)
wait():线程处于等待状态
释放对象的锁,cpu的资源
notify():唤醒对方正在处于等待池中的线程
没有对象的资源,就算是被唤醒也无法执行,必须要获取到对象的锁才能有资格执行
notifyAll()
唤醒全部
注意:使用在一个同步的环境下
3.IP:定义网络上的节点(电脑,手机,pad,路由器...)..区分节点
分类:
IPV4 : 32位
IPV6 : 128位
特点的IP:
局域网内部IP:192.168.0.0~192.168.255.255
127.0.0.1 : 默认本地IP
localhost : 本地域名
DNS服务器:解析IP和域名之间的关系
InetAddress 此类表示互联网协议 (IP) 地址。
static InetAddress getLocalHost() 返回本地主机。
static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址。
String getHostName() 获取此 IP 地址的主机名。
String getHostAddress() 返回 IP 地址字符串(以文本表现形式)。
端口: InetSocketAddress
4. 端口port:区分软件...
2个字节: 0~65535
注意:
1.同一的协议下端口号不能冲突
2.自定义设置端口号建议设置越大越好,一般8000网上
预留端口号:
80: http
8080:tomcat
1521:Oracle
3306:Mysql
InetSocketAddress 此类实现 IP 套接字地址(IP 地址 + 端口号)。
InetSocketAddress(String hostname, int port) 根据IP|域名+端口号构建
InetAddress getAddress() 获取 InetAddress。
String getHostName() 获取 hostname。
int getPort() 获取端口号。
5.URL:统一资源定位符
互联网三大基石: http html url
url的构成:
协议
域名
端口
资源
数据
"http://www.baidu.com:80/index.html?name=zhangsan&pwd=123#a"
URL(String spec) 构建url
6-1.Socket套接字: 传输层为应用层开辟的小口子,通过 Socket进行发送和接收数据
不同协议下的socket实现不同
面向Socket编程
tcp: 面向连接 打电话 安全 开销大 基于3次握手 大小没有限制 . 基于流传输
udp: 非面向连接 写信|发短信 只管写只管发 开销小,效率高 不安全 大小有限制 一般不超过60k , 基于字节数组传输
基于udp的socket编程:
发送端
接收端
DatagramSocket 此类表示用来发送和接收数据报包的套接字。(定义发送端|接收端)
DatagramPacket数据报包(数据打包)
udp实现发送端的基本流程: 发送端和服务端是平等的
1.定义发送端 DatagramSocket(端口号) 指定发送端的端口号
2.准备数据
3.对数据打包 DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。
4.发送void send(DatagramPacket p)
5.关闭 void close() 关闭此数据报套接字。
6-2.接收端基本流程:
1.定义接收端 DatagramSocket(int port)
2.准备字节数组
3.准备包裹用来接收数据 DatagramPacket(byte[] buf, int length)
4.接收
5.从包裹中获取数据
byte[] getData()
返回数据缓冲区。
int getLength()
返回将要发送或接收到的数据的长度。
6.关闭
7-1.Socket 此类实现客户端套接字
客户端
1.定义客户端 Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。
2.IO操作
输出流OutputStream getOutputStream() 返回此套接字的输出流。
3.刷出
4.关闭
7-2.ServerSocket 此类实现服务器套接字。
TCP服务端
1.定义服务端 ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
2.阻塞式监听 一个客户端连接成功,就是一个socket
3.io操作
4.关闭
8-1.TCP实现文件上传客户端 :
1.定义客户端 Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。
2.IO操作 先从文件中读入数据-->写出数据
new FileInputStream("");
输出流OutputStream getOutputStream() 返回此套接字的输出流。
3.刷出
4.关闭
8-2.TCP实现文件上传服务端:
1.定义服务端 ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
2.阻塞式监听 一个客户端连接成功,就是一个socket
3.io操作 :从客户端读入数据 --->文件输出流 写出文件中
4.刷出
5.关闭