# 前言
线程:
a. 当前计算机在执行的任务称之为进程
b. 进程中在执行的小任务称之为线程
c. 多线程的意义:提高CPU的利用率
d. 定义方式:继承Thread,实现Runnable,实现Callable接口
e. 多线程的并发安全问题:线程之间是相互抢占资源,而且抢占是发生在线程执行的每一步。由于线程抢占导致出现了不合理数据的现象
f. 同步锁机制:
i. 利用synchronized代码块将需要保护的代码加锁 ii. 锁对象要求被所有的线程都认识 - > 共享资源、方法区中的资源、this iii. 同步和异步:同步一定是安全的,不安全一定是异步的 iv. 当形成锁的相互嵌套的时候,容易出现死锁g. 等待唤醒机制:必须结合锁来使用,往往需要标记位来进行状态的标记
h. 线程的优先级:1-10。数字越大优先级越高
i. 线程的状态:创建、阻塞、就绪、运行、消亡
j. 守护线程:被守护线程结束就会导致守护线程结束
k. 线程的创建场景:系统自启、用户请求、线程唤醒
l. 线程的销毁场景:自然,他杀,意外
m. sleep和wait的区别
单例模式
a. 在全局过程中只存在一个实例
b. 特点:构造方法私有,提供本类的静态对象
c. 饿汉式和懒汉式
# 网络编程
一、网络基本概念
网络模型:物理层、数据链路层、网络层、传输层(UDP、TCP)、会话层、表示层 、应用层--- http、ftp、pop3、SMATP...
网络协议:服务商和浏览器厂商之间约定的解析方式
IP地址:实际上是在网络中标记主机
a. IPv4:用四组数字来表示一个IP地址,每一组数字的取值范围是0~ > 255,一共能表示232个取值
b. IPv6:表现形式比较多样
域名:厂商提供的便于记忆的字符串
a. 一级域名:用于表示网站的性质
b. 二级域名:往往是公司的名称/标记
c. 三级域名:表示具体的应用
DNS服务器:将域名和IP地址进行映射
端口:计算机和外界进行信息交互的媒介。端口号:0~65535,其中0~ 1024中的部分端口被计算机内部占用的
二、SocketAddress
用于指定地址和端口号
本身是一个抽象类,所以使用的是其子类InetSocketAddress
127.0.0.1/localhost表示本地地址
三、UDP
特点:
a. 实际上是基于网络进行数据传输的流
b. 不建立连接的
c. 不可靠,可能会产生数据的丢失
d. 对数据进行封包,每一个包不超过64K
e. 传输速度相对较快
f. 适用于要求速度但对可靠性依赖较低的场景:视频聊天
发送端:
a. 创建UDP对象
b. 准备数据包,将数据以及地址放到数据包中
c. 发送数据包
d. 关流
接收端:
a. 创建UDP对象,绑定监听的端口号
b. 准备数据包
c. 接收数据包
d. 关流
e. 解析数据
先启动接收端再启动发送端
练习:利用多线程来实现收发效果 --- 定义一个线程做接收端,定义一个线程做发送端
255.255.255.255:广播地址。只要在同一个局域网内那么都会收到数据
四、TCP
- 特点:
a. 基于网络进行数据传输的流
b. 需要建立连接的,经历三次握手
c. 可靠,保证数据是不会丢失的
d. 理论上不限制数据大小
e. 传输速度相对较慢
f. 适用于要求可靠性但是对速度依赖性相对较低的场景:文件的上传/下载
客户端:
a. 创建客户端Socket对象
b. 发起连接,绑定要连接的地址和端口号
c. 获取输出流,来写出数据,关闭输出流
d. 关流
服务器端:
a. 创建服务器端ServerSocket对象
b. 接受连接,获取到连接过来的Socket对象
c. 获取输入流,读取数据,关闭输入流
d. 关流
扩展:Java中的流
BIO - Blocking IO - 同步式阻塞式IO
NIO - NonBlocking IO - 同步式非阻塞式IO - JDK1.4
AIO - Asynchronous IO - 异步式非阻塞式IO - JDK1.8
# 反射
一、概述
反射是一个动态加载类的过程,在加载过程中需要解析类,然后分析类的字节码,根据字节码来产生实例对象
每一个类编译完成之后对应了一个class文件,class文件加载到内存中对应了一段字节码,如果将字节码看做对象,那么意味着可以抽取出一个代 表字节码的类 - Class
Package - 代表包的类
Method - 代表方法的类
Field - 代表属性的类
Constructor - 代表构造方法的类
Annotation - 代表注解的类
二、获取Class对象
通过类名.class的方式获取指定类的字节码对象
通过对象.getClass()的方式来获取实际类型对应的字节码对象
通过Class.forName(类的全路径名)来获取指定类的字节码对象
← 18线程 20JDK的一些新特性 →