关于线程通行的应用,以及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.关闭
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值