线程安全:
多线程同时操作同一份资源,才有可能遇到数据不安全情况
同步锁 : synchronized
使用分为2部分:
同步的条件 : 协调多个线程排队执行的条件(对象的锁资源:默认理解为只有一个)
同步的代码 : 多个线程之间排队执行的代码
同步方法: synchronized关键字修饰方法 --> 简单,但是范围可能过大,效率低
成员方法
静态方法
同步块: 需要多线程排队执行的代码定义在同步块中,满足条件要求才能执行 --> 排队执行的代码范围小,效率高,有可能不安全
synchronized(条件){
排队执行的代码段;
}
同步块: 需要多线程排队执行的代码定义在同步块中,满足条件要求才能执行 --> 排队执行的代码范围小,效率高,有可能不安全
synchronized(条件){
排队执行的代码段;
}
条件:
this : 默认指代当前调用成员方法的对象
类.class : 指代某一个类型的Class对象
资源 : 成员变量->对象
测试使用同步块保证12306案例数据安全:
锁类.class : 简单,因为一个类的Class对象只有一个,相当于锁了这个类的所有对象,如果存在多个对象,建议直接锁某个对象,使用this
锁this : 锁住当前调用成员方法的对象,相当于锁了当前对象的所有资源(成员),如果只想锁某一个资源,name建议直接锁资源
注意:
锁要锁不变的东西才能锁住,自定义的引用数据类型的地址不变
网络编程: 底层数据的传输
网页编程: 上层的应用
IP : 表示定位节点
端口 : 区分软件
URL : 统一资源定位符
协议 : 标准 , 要求 , 合同 , 协议可以使交流变得更加畅通,更加标准,更加规范.
传输层协议 :
UDP : 相当于写信, 协议简单,开销小,效率高 不安全 大小有限制,一般不超过60k
TCP : 相当于打电话, 面向连接的,安全,效率低 没有大小限制 *****
IP : 定义互联网中的节点
IPV4 : 4个字节 32位
IPV6 : 12位
特殊的IP地址:
192.168.0.0~192.168.255.255 非注册IP,供组织内部使用
127.0.0.1 本地IP
localhost : 本地
IP -> 域名 : DNS解析器
java.net 网络包
InetAddress : 此类表示Internet协议(IP)地址。
端口 : 区分软件
1.2个字节的端口号 0~65535
2.同一协议下端口号不能冲突
3.8000以内的端口号不推荐使用,称为预留端口号
4.常见的端口号:
80 : http
8080 : tomcat
1521 : Oracle
3306 : Mysql
InetSocketAddress 此类实现IP套接字地址(IP地址+端口号).
URL : 统一资源定位符
互联网的三大基石 : http html url
组成:
1.协议
2.域名
3.端口
4.资源
http://www.baidu.com:80/index.html?username=zhangsan&password=1234#a
URL : 类URL表示统一资源定位符,指向万维网上的“资源”的指针。
Socket 套接字
传输层为应用层开辟的口子,相当于码头,插座..
不同的传输层协议下Socket实现不同
网络编程其实成为面向Socket编程
传输层协议: 合同
UDP : 非面向连接的,相当于写信,邮寄包裹 不安全|不可靠 协议简单,开销小,效率高 只管发送 大小存在限制,不超过60k
TCP : 面向连接,相当于打电话, 安全可靠 但是效率低, 没有大小限制 3次握手 4次挥手
UDP协议下数据的传输
节点A : 发送端
节点B : 接收端
UDP协议下两端平等,基于字节数组传输数据
DatagramSocket : 此类表示用于发送和接收数据报包的套接字。
DatagramPacket : 数据报包
UDP协议实现发送端:
1.定义我是发送端 DatagramSocket(int port) 构造一个数据报套接字并将其绑定到本地主机上的指定端口。
2.准备数据
3.数据打包 DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)
4.发送数据 void send(DatagramPacket p)
5.关闭
注意: 同一协议下端口号不能冲突
UDP协议实现接收端:
1.定义我是接收端 DatagramSocket(int port) 构造一个数据报套接字并将其绑定到本地主机上的指定端口。
2.准备包裹接收数据
3.接收数据,阻塞式接口 void receive(DatagramPacket p)
4.处理数据
5.关闭



