网络编程

CAS算法:

  • 在修改共享数据的时候,把原来的旧值记录下来
  • 如果在内存中的值跟原来的旧值一样,证明没有其他线程操作过内存值,则修改成功
  • 如果内存中的值跟原来的旧值不一样了,证明已经有其他线程操作过内存值了
  • 则修改失败,需要获取现在最新的值,再次进行操作,这个重新获取的就是自旋。
    在这里插入图片描述

Hsatable
1、Hashtable采取悲观锁synchronized的形式保证数据的安全性
2、只要有线程访问,会将整张表全部锁起来,所以Hashtable的效率低下。

  • HashMap线程不安全的,多线程环境下会有数据安全问题
  • Hashtable是线程安全的,但是会将整张表锁起来,效率低下
  • ConcurrentHashMap也是线程安全的,效率较高

1. 7 ConcurrentHashMap

在这里插入图片描述

1. 8 ConcurrentHashMap

1、如果使用空参构造创建ConcurrentHashMap对象,则什么事情都不做
在第一次添加元素的时候创建哈希表
2、计算当前元素应存入的所引
3、如果该索引位置为null,利用cas算法,将本节点添加到数组中
4、如果该索引位置不为null,则利用volatile关键字获得当前位置最新的结点地址,挂在他下面,变成链表
5、当链表的长度大于等于8时,自动转换成红黑树
6、以链表或者红黑树头结点为锁对象,配合悲观锁保证多线程操作集合时数据的安全性。

网络编程概述

网络编程

  • 在网络通信协议,不同计算机运行的程序,可以进行数据传输

网络编程三要素

IP地址

  • 设备在网络中的地址,是唯一标识的

端口

  • 应用程序在设备中唯一标识
  • 一个端口号只能被一个应用程序使用

端口号:用两个字节表示的整数,它取值0~65535

其中0~1023之间的端口号用于一些知名的网络服务或者或者应用

协议

  • 数据在网络中传输的规则,常见的协议有UDP协议和TCP协议
    协议:计算机网络中,连接和通信的规则被称为网络通信协议
    UDP协议
  • 用户数据报协议(User Datagram Protocol)
  • UDP是面向无连接通信协议
    速度快、有大小限制一次最多发送64K,数据不安全,易丢失数据

TCP

  • 传输控制协议
  • TCP协议是面向连接的通信协议
  • 速度慢、没有大小限制、数据安全

InetAddress的使用

为了方便对IP地址的获取和操作,Java提供了一个类InetAnddress
InetAddress: 此类表示Internet协议(IP)地址

package com.socketdemo1;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class InetadressDemo1 {
    public static void main(String[] args) throws UnknownHostException {
        InetAddress address = InetAddress.getByName("梅赛德斯");

        String hostName = address.getHostName();
        System.out.println("主机名为 ;" + hostName);

        String ip = address.getHostAddress();
        System.out.println("IP  "+ip);
    }
}

UDP发送端
在这里插入图片描述

package com.socketdemo2;

import java.io.IOException;
import java.net.*;

public class ClientDemo {
    public static void main(String[] args) throws IOException {
        //找码头
        DatagramSocket ds = new DatagramSocket();

        //打包礼物
        String s = "送给村长的礼物";
        byte[] bytes = s.getBytes();

        InetAddress address = InetAddress.getByName("127.0.0.1");
        int port = 10000;
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);

        //由码头发送包裹

        ds.send(dp);

        //付钱走羊
        ds.close();
    }
}

UDP接收数据
在这里插入图片描述

TCP通信原理
TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象。
通信之前要保证连接已经建立。
通过Socket产生IO流来进行网络通信。

在这里插入图片描述
TCP发送数据

package com.socketdemo6;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class ClientDemo {
    public static void main(String[] args) throws IOException {
        //创建一个Socket对象
        Socket socket = new Socket("127.0.0.1", 10000);
        
        //获取一个IO流开始写数据
        OutputStream os = socket.getOutputStream();
        os.write("hello".getBytes());
        
        //释放资源
        os.close();
        socket.close();
    }
}

TCP接收数据

package com.socketdemo6;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerDemo {
    public static void main(String[] args) throws IOException {
        //创建Socket对象
        ServerSocket ss = new ServerSocket(10001);
        //等待客户连接
        System.out.println(111);
        Socket accept = ss.accept();
        System.out.println(222);
        //获得输入流对象
        InputStream is = accept.getInputStream();
        int b;
        while ((b = is.read()) != -1) {
            System.out.print((char) b);
        }
        //释放资源
        is.close();
        ss.close();
    }
}

  • accept方法是阻塞的,作用就是等待客户端连接
  • 客户端创建对象并连接服务器,此时是通过三次握手协议保证跟服务器之间的连接
  • 针对客户端来讲,是往外写,所有是输出流
  • 针对服务器来讲,是往里读的,所以是输入流
  • read方法也是阻塞的
  • 在关流的时候,还多了一个往服务器写结束标记的动作
  • 最后一步断开连接,通过四次挥手协议保证连接终止

三次握手

在这里插入图片描述

四次挥手

在这里插入图片描述

网络编程:就是可以让两台计算机进行数据交互
网络编程三要素:
IP : 设备在网络中唯一标识
端口号:应用程序在设备中唯一的标识
协议:数据在传输过程中遵守的规则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值