17.多线程基础
线程相关概念
程序:未完成特定任务、用某种语言编写的一组指令的集合。简单的说:就是我们写的代码。
进程
1.进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存空间。当我们使用迅雷,又启动了一个进程,操作系统将为迅雷分配新的内存空间。
2.进程是程序的一次执行过程,或是正在运行的一个程序。是动态过程:有它自身的产生、存在和消亡的过程
什么是线程?
1.线程由进程创建的,是进程的一个实体
2.一个进程可以拥有多个线程。
其他相关概念
1.单线程:同一个时刻,只允许执行一个线程
2.多线程:同一个时刻,可以执行多个线程,比如:一个qq进程,可以同时打开多个聊天窗口,一个迅雷进程,可以同时下载多个文件
线程基本使用
创建线程的两种方式
继承 Thread 类
实现 Runnable 接口
#### 继承 Thread vs 实现 Runnable 的区别
线程常用方法
常用方法第一组
注意事项和细节
常用方法第二组
用户线程和守护线程
线程的生命周期
JDK 中用 Thread.State 枚举表示了线程的几种状态
线程状态转换图
线程的同步
Synchronized
同步具体方法-Synchronized
互斥锁
注意细节
线程的死锁
释放锁
下面操作会释放锁
下面操作不会释放锁
19.IO 流
文件
文件流
常用的文件操作
获取文件的相关信息
目录的操作和文件删除
IO 流原理及流的分类
流的分类
IO 流体系图-常用的类
文件 VS 流
FileInputStream
FileOutputStream
FileReader 和 FileWriter 介绍
FileReader
FileReader 相关方法:
FileWriter
FileWriter 常用方法
节点流和处理流
节点流和处理流一览图
节点流和处理流的区别和联系
处理流的功能主要体现在以下两个方面
处理流-BufferedReader 和 BufferedWriter
处理流-BufferedInputStream 和 BufferedOutputStream
介绍 BufferedOutputStream
对象流-ObjectInputStream 和 ObjectOutputStream
@Test
public void readDog2() throws IOException {
String filePath = "e:\\Dog.properties";
Properties properties = new Properties();
properties.load(new FileReader(filePath));
// properties.list(System.out);
String name = properties.get("name") + "";
int age = Integer.parseInt(properties.get("age") + "");
String color = properties.get("color") + "";
Dog dog = new Dog(name, age, color);
System.out.println(dog.toString());
//将Dog对象序列化
String SerFilePath = "e:\\dog.dat";
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(SerFilePath));
oos.writeObject(dog);
oos.close();
System.out.println("序列化成功!");
}
@Test
public void unSerDog() throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e:\\dog.dat"));
Dog dog =(Dog) ois.readObject();
System.out.println(dog);
ois.close();
System.out.println("反序列话完成!");
}
对象流介绍
功能:提供了对基本类型或对象类型的序列化和反序列化的方法 ObjectOutputStream 提供 序列化功能
ObjectInputStream 提供 反序列化功能
标准输入输出流
转换流-InputStreamReader 和 OutputStreamWriter
打印流-PrintStream 和 PrintWriter
Properties 类
基本介绍
21.网络编程
网络的相关概念
网络通信
网络
ip 地址
ipv4 地址分类
域名
网络通信协议
网络通信协议
TCP 和 UDP
InetAddress 类
相关方法
Socket
TCP 网络通信编程
设置结束标记 socket.shutdownOutput()
bufferedWriter.newLine();// 插入一个换行符,表示写入的内容结束, 注意,要求对方使用 readLine()!!!
bufferedWriter.flush();//如果使用的字符流,需要手动刷新,否则数据不会写入数据通道
netstat 指令
TCP 网络通讯不为人知的秘密
UDP 网络通信编程[了解]
基本流程
23.反射(reflection)
反射机制
Java 反射机制原理示意图!!!
Java 反射机制可以完成
反射相关的主要类
反射优点和缺点
反射调用优化-关闭访问检查
Class 类
基本介绍
Class 类的常用方法
获取 Class 类对象
哪些类型有 Class 对象
如下类型有 Class 对象
类加载
类加载时机
类加载过程图
类加载各阶段完成任务
**
**
加载阶段
连接阶段-验证
连接阶段-准备
**
**
class A {
//属性-成员变量-字段
//分析类加载的链接阶段-准备 属性是如何处理
public int n1 = 10;
public static int n2 = 20;
public static final int n3 = 30;
//1. n1 是实例属性, 不是静态变量,因此在准备阶段,是不会分配内存
// 2. n2 是静态变量,分配内存 n2 是默认初始化 0 ,而不是 20
// 3. n3 是 static final 是常量, 他和静态变量不一样, 因为一旦赋值就不变 n3 = 30
}
连接阶段-解析
**
**
Initialization(初始化)
通过反射获取类的结构信息
第一组: java.lang.Class 类
第二组: java.lang.reflect.Field 类
第三组: java.lang.reflect.Method 类
第四组: java.lang.reflect.Constructor 类
通过反射创建对象
通过反射访问类中的成员
访问属性