1.java 的输入/输出:
java的 I/O是通过java.io包下的类和接口支持,
其中最重要的是5个类,分别是
File,OutputStream,InputStream, Write,Reader
及一个接口Serializable.
File类:可以对文件进行操作
字节流:(OutputStream/InputStream),
可以使用字节流读取文件内容
字符流:(Writer/Reader)
转换流:(InputStreamReader/OutputStreamWriter)
将字节流转换为字符流
缓冲流:(BufferedReader),
读取缓冲区的内容
内存操作流:(ByteArrayInputStream/ByteArrayOutputStream),可以与内存的数据
时进行交互
打印流:
Scanner类:对输入的输入,还可以验证数据
合并流:(SequenceInputStream)
类可以将两个文件内容合并成一个文件
压缩流:对文件压缩操作
Serializable接口:对象序列化
输入字节流层次:
InputStream(父类):ByteArrayInputStream,FileInputStream,
StringBufferInputStream,SequenceInputStream,
ObjectInputStream,
FilterInputStream(BufferedInputStream,DataInputStream,LineNumberInputStream,PushbackInputStream) [子类]
输出字节流层次:
OutputStream(父类):ByteArrayOutputStream,
FileOutputStream,ObjectOutputStream,PipedOutputStream,
FilterOutputStream(BufferedOutputStream,DataOutputStream,PintStream) [子类]
输入字符流类的层次:
Reader(父类):BufferedReader(LineNumberReader),
CharArrayReader,FilterReader(PushbackReader),
InputStreamReader(FileReader), PipedReader,StringReader
输出字符流类的层次:
Writer(父类):BufferedWriter,CharArrayWriter,
FilterWrite,OutputStreamWrite(FileWriter),
PipedWriter,PrintWriter,StringWriter
2.JAVA多线程机制:
多线程:指的是这个程序(一个进程)运行时产生了不止一个线程
并行与并发:
并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。并发:通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层面不是真正的同时。
并发:并发往往在场景中有公用的资源,那么针对这个公用的资源往往产生瓶颈,我们会用TPS或者QPS来反应这个系统的处理能力。
线程状态:
*新建:当创建一个Thread类和他的子类对象后,新产生的线程对象总是处于新建状态,并获得除CPU外所需的资源。
*就绪:当新建状态的线程被启动后,将进入线程队列等待CPU资源。这时,他已经具备了运行的条件,一旦获得CPU资源,就可以脱离创建它的主线程独立运行了,另外,与拿来出于阻塞状态的线程结束阻塞状态后,也将进入就绪状态。
*运行:当一个就绪状态的线程获得CPU时,就进入了运行状态。每个Thread类,及其子类对象都有一个run()方法,一旦线程开始运行,就会自动运行该方法。在run()方法中定义了线程所有的操作。
*阻塞:一个正在运行的线程因为某种原因为某种特殊的情况,比如,某种资源无法满足,会让出CPU并暂时停止自身运行状态,进入阻塞状态。只有当引起阻塞的原因消除时,他才能从新进入就绪。
*死亡:不具备继续运行的能力的线程处于死亡状态。这一般是有两种情况引起的:一种是run()方法已经停止运行完毕了,另一种是由其他的线程(一般是主线程)强制终止它。
3.Thread:
在JAVA中,两种方法可以创建线程:一种是继承Thread类;另外一中是实现Runnable接口。两种方法都要用到Thread类以及相关的方法。
*Thread() 构造一个线程对象
*Thread(Runnable target) 构造一个线程对象,target是被创建线程的目标对象,他实现了Runnable接口中的run()方法
*Thread(String name)用指定的字符串为名字构造一个线程对象。
4.线程的通信与协调
*互斥:当多个线程需要访问同一资源,而这一资源在某一时刻只允许一个线程访问,那么这些线程就是互斥的。
*同步:多个线程需要访问同一资源,而且需要相互配合才能正常工作。那么这些线程运行时就是一种同步关系。
*临界区:为了实现线程间的互斥和同步,需要将共享资源放入同一个区域一次只允许一个县城进入,该区域被称为临界资源。线程在访问共享资源前需要进行检查,看自己能否对该资源进行访问。如果有权访问,还需要阻止其他线程进入该区域。
*死锁:若有多个线程相互等待其他线程释放资源。且所有线程都不释放自己所占有的资源,从而导致相关线程处于永远等待的状态,这种现象被称为线程死锁。