CAS算法:

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

1、如果使用空参构造创建ConcurrentHashMap对象,则什么事情都不做
在第一次添加元素的时候创建哈希表
2、计算当前元素应存入的所引
3、如果该索引位置为null,利用cas算法,将本节点添加到数组中
4、如果该索引位置不为null,则利用volatile关键字获得当前位置最新的结点地址,挂在他下面,变成链表
5、当链表的长度大于等于8时,自动转换成红黑树
6、以链表或者红黑树头结点为锁对象,配合悲观锁保证多线程操作集合时数据的安全性。
网络编程
其中0~1023之间的端口号用于一些知名的网络服务或者或者应用
TCP
为了方便对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();
}
}


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