关于线程通行的应用以及IP的基础小结

线程通信:wait 和 notify和notifyAll() -->同步环境下使用 否则:IllegalMonitorStateException

人车公用街道的案例

street Person Car
wait():使线程进入等待序列,释放对象锁,让出cpu的资源
notify和notifyAll():唤醒对方处于等待序列的线程,具有可运行的能力,并且要获取对象的锁和cpu的资源才能运行,如果被唤醒的线程没有获取对象锁无法执行
Ex.

/街道
class Street{
//信号灯
boolean flag=false; //false 人走 true 车走

//东西   ->人走
public synchronized void we(){
	if(flag==true){
		try {
			this.wait();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}else{
		try {
			Thread.sleep(1000); //人1000ms走完
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("人走.....");
		//变灯
		flag=true;
		//唤醒对方正在等待的线程,被唤醒的线程,具有了能够被cpu调度的能力,就绪状态
		this.notifyAll();  
	}
}
//南北   	->车走
public synchronized void ns(){
	if(flag==false){
		try {
			this.wait();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}else{
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("车走...");
		flag=false;
		this.notify();
	}
}

}

//人类
class Person implements Runnable{
//资源
Street street=null;

public Person(Street street) {
	this.street=street;
}

@Override
public void run() {
	while(true){
		street.we();
	}
}

}
//车
class Car implements Runnable{
//资源
Street street=null;

public Car(Street street) {
	this.street=street;
}

@Override
public void run() {
	while(true){
		street.ns();
	}
}

}

IP:定位网络中的不同节点(电子设备:手机,电脑,路由器…)
IPV4 4个字节 32位 IPV6

特殊的IP:
192.168.0.0~192.168.255.255 局域网内部使用
127.0.0.1 本地IP
localhost 本地域名
IP和域名: DNS域名解析服务器
InetAddress 此类表示互联网协议 (IP) 地址。

端口:区分不同软件
0~65535 2个字节
统一协议下端口不能冲突
设置端口号时尽量越大越好
预留端口号:8000

常见端口号:
80: http
8080: tomcat
1521: Oracle
3306: mysql
InetSocketAddress 此类实现 IP 套接字地址(IP 地址 + 端口号)。

URL:统一资源定位符 区分不同的资源
互联网的三大基石: http html url

协议:
域名:
端口:
资源:
Socket套接字:传输层为应用层开辟的通道(小口子)
不同的协议针对于Socket的实现是不同的
传输层协议之间的区别:
tcp: 相当于打电话 基于面向连接的 安全 基于io流传输 占用资源多,开销大,效率低 3次握手:1.请求 2.回应 3.传输
udp: 相当于写信 非面向连接的 只管发送 不安全 开销小,效率高 大小有限制 一般不超过60k 基于字节数组

UDP
UDP实现Socket编程:
DatagramSocket:定义发送端和接收端
DatagramPacket:数据的包裹

udp实现发送端:基本流程

1.DatagramSocket 指定端口 定义发送端 DatagramSocket(int port)
2.准备数据 ,转为字节数组
3.DatagramPacket 打包
4.发送 void send(DatagramPacket p) 从此套接字发送数据报包。
5.关闭资源
UDP实现接收端:基本流程

1.DatagramSocket 指定端口号 定义接收端
2.准备字节数组,进行打包(用来接收数据,把数据接收到包裹里面的字节数据中)
3.接收
4.处理数据
5.关闭
tcp
tcp实现客户端:基本流程

1.定义客户端 Socket 指定服务端的ip 端口
2.准备数据
3.通过io读写
4.关闭
tcp实现服务端:基本流程

1.定义服务端 ServerSocket
2.阻塞式监听
3.通过io读写
4.关闭

猜你喜欢

转载自blog.csdn.net/PussyCatsss/article/details/92555433