JavaSE学习心得(多线程与网络编程篇)
多线程-网络编程
前言
多线程&JUC
多线程三种实现方式
第一种实现方式
第二种实现方式
第三种实现方式
常见成员方法
买票引发的安全问题
同步代码块
同步方法
Lock锁
生产者和消费者
常见方法
等待唤醒机制
练习
抢红包
抽奖
多线程统计并求最大值
多线程之间的比较
线程池
自定义线程池
任务拒绝策略
网络编程
IP
IPV4
IPV6
端口号
协议
UDP通信程序
发送数据
接收数据
聊天室
UDP的三种通信方式
TCP通信程序
练习
发送数据
接收和反馈
上传文件
上传文件(多线程版)
上传文件(线程池优化)
前言
接上期文章:JavaSE学习心得(异常和文件流篇)
教程链接:黑马程序员Java零基础视频教程_下部(Java入门,含斯坦福大学练习题+力扣算法题和大厂java面试题)_哔哩哔哩_bilibili
本期分享多线程、网络编程部分
多线程&JUC
什么是多线程?
多线程可以让程序同时做多件事情
多线程的作用?
提高效率
多线程的应用场景?
想让多个事情同时运行就需要用到多线程比如:软件中的耗时操作、所有的聊天软件、所有的服务器
并发:在同一时刻,有多个指令在单个CPU交替执行
并行:在同一时刻,有多个指令在多个CPU同时执行
多线程三种实现方式
第一种实现方式
第二种实现方式
第三种实现方式
常见成员方法
买票引发的安全问题
同步代码块
把操作共享数据的代码锁起来
特点1:锁默认打开,有一个线程进去了,锁自动关闭
特点2:里面的代码全部执行完毕,线程出来,锁自动打开
同步方法
就是把synchronized关键字加到方法上
特点1: 同步方法是锁住方法里面所有的代码
特点2:锁对象不能自己指定
Lock锁
手动上锁、手动释放锁
void lock():获得锁
void unlock():释放锁
Lock是接口不能直接实例化,这里采用它的实现类ReentrantLock来实例化
生产者和消费者
常见方法
等待唤醒机制
练习
抢红包
抢红包也用到了多线程。
假设:100块,分成了3个包,现在有5个人去抢。
其中,红包是共享数据。
5个人是5条线程。
打印结果如下:
XXX抢到了XXX元
XXX抢到了XXX元
XXX抢到了XXX元
XXX没抢到
XXX没抢到
抽奖
多线程统计并求最大值
在上一题基础上继续完成如下需求:
每次抽的过程中,不打印,抽完时一次性打印(随机)在此次抽奖过程中,抽奖箱1总共产生了6个奖项
分别为:10,20,100,500,2,300最高奖项为300元,总计额为932元在此次抽奖过程中,抽奖箱2总共产生了6个奖项。
分别为:5,50,200,800,80,700最高奖项为800元,总计额为1835元
多线程之间的比较
在上一题基础上继续完成如下需求:
在此次抽奖过程中,抽奖箱1总共产生了6个奖项,分别为:10,20,100,500,2,300最高奖项为300元,总计额为932元
在此次抽奖过程中,抽奖箱2总共产生了6个奖项,分别为:5,50,200,800,80,700最高奖项为800元,总计额为1835元
在此次抽奖过程中,抽奖箱2中产生了最大奖项,该奖项金额为800元
以上打印效果只是数据模拟,实际代码运行的效果会有差异
线程池
① 创建一个池子,池子中是空的
②提交任务时,池子会创建新的线程对象,任务执行完毕,线程归还给池子,下回再次提交任务时,不需要创建新的线程,直接复用已有的线程即可
③ 但是如果提交任务时,池子中没有空闲线程,也无法创建新的线程,任务就会排队等待
Executors:线程池的工具类通过调用方法返回不同类型的线程池对象
自定义线程池
任务拒绝策略
网络编程
什么网络编程?
计算机跟计算机之间通过网络进行数据传输常见软件架构有哪些?
CS/BS
通信的软件架构CS\BS的各有什么区别和优缺点
CS:客户端服务端模式需要开发客户端
BS:浏览器服务端模式不需要开发客户端。
CS:适合定制专业化的办公类软件如:IDEA、网游BS:适合移动互联网应用,可以在任何地方随时访问的系统
网络编程三要素分别表示什么?
IP:设备在网络中的地址,是唯一的标识端口号:应用程序在设备中唯一的标识。
协议:数据在网络中传输的规则
常见的协议有UDP、TCP、http、https、ftp
IP
Ip的作用
设备在网络中的地址,是唯一的标识
IPv4有什么特点
目前的主流方案最多只有2^32次方个ip,目前已经用完了
IPv6有什么特点
为了解决IPv4不够用而出现的最多有2^128次方个ip
可以为地球上的每一粒沙子都设定ip
IPV4
采用32位地址长度,分成4组
IPV6
现在如何解决IPV4不够的问题?
利用局域网IP解决IP不够的问题
特殊的IP是什么?
127.0.0.1(永远表示本机)
常见的两个CMD命令?
ipconfig:查看本机IP地址
ping:检查网络是否连通
端口号
应用程序在设备中唯一的标识。
端口号:由两个字节表示的整数,取值范围:0~65535
其中0~1023之间的端口号用于一些知名的网络服务或者应用。
我们自己使用1024以上的端口号就可以了。
注意:一个端口号只能被一个应用程序使用。
协议
计算机网络中,连接和通信的规则被称为网络通信协议
UDP协议
用户数据报协议(User Datagram Protocol)
UDP是面向无连接通信协议。
速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据
TCP协议
传输控制协议TCP(Transmission control Protocol)TCP协议是面向连接的通信协议。
速度慢,没有大小限制,数据安全。
UDP通信程序
发送数据
创建发送端的Datagramsocket对象
数据打包(DatagramPacket)
发送数据
释放资源
接收数据
创建接收端的DatagramSocket对象
接收打包好的数据
解析数据包
释放资源
聊天室
按照下面的要求实现程序
UDP发送数据: 数据来自于键盘录入,直到输入的数据是886,发送数据结束UDP接收数据: 因为接收端不知道发送端什么时候停止发送,故采用死循环接收
UDP的三种通信方式
①单播
以前的代码就是单播
②组播组播地址:224.0.0.0~239.255.255.255
其中224.0.0.0~224.0.0.255 为预留的组播地址
③广播
广播地址:255.255.255.255
TCP通信程序
练习
发送数据
接收和反馈
客户端:发送一条数据,接收服务端反馈的消息并打印
服务器:接收数据并打印,再给客户端反馈消息
上传文件
客户端:将本地文件上传到服务器。接收服务器的反馈。
服务器:接收客户端上传的文件,上传完毕之后给出反馈。
上传文件(多线程版)
想要服务器不停止,能能接收很多用户上传的图片
提示:可以用循环或者多线程,
但是循环不合理,最优解法是(循环+多线程)改写
上传文件(线程池优化)