复习{
字符流: 一般处理大型文本格式的文件 较好,效率高
Reader: 抽象类
char[]
BufferedReader: 字符流的缓冲区
构造器:
new BufferedReader(new InputStreamReader());
|--String str = readLine();按行读
InputStreamReader: 字节流 转换为 字符流的 桥 转换流
new InputStreamReader(new FileInputStream(new File()))
CharArrayReader: 字符数组流
read(char[] c);
read();
read(char[] c , int off ,int len);
Writer: 抽象类
|-- BufferedWriter 字符流的缓冲区
writer(String str);
newLine(); 换行
flush();
close();
|-- OutputStreamWriter 转换流
|-- CharArrayWriter 字符数组流
writer(int a);
writer(char[] c);
writer(char[] c ,int off, int len);
|-- PrintWriter 打印流
append();
write();
print();
println();
目的都是为了将数据写入到 文件中
高级流: NIO
NIO (non-blocking I O ) new IO
三大核心:
|-- Buffer: 缓冲区 抽象类
|-- ByteBuffer ,ShortBuffer, IntBuffer, LongBuffer
DoubleBuffer, FloatBuffer, CharBuffer
StringBuffer
ByteBuffer buffer = ByteBuffer.allocate(100);
ByteBuffer buffer = ByteBuffer.allocateDirect(大小);
postion , limit, capacity
位置 限制 容量
引用数据类型:
1.数组, 2,类, 3,接口 4,枚举 5 ,注解
|-- Channel: 通道
FileInputStream();
FileOutputStream();
FileChannel c = getChannel();
c.read(ByteBuffer[] b);
buffer.flip(); 切换读写模式 postion 清 0
c.write(ByteBuffer[] b);
|-- Selector:
监听器, 监听多个 Channel 传输数据
字节流
File类的应用
字符流
NIO
---------------------------------------------------------------------------}
多线程:
1.程序就是一个操作系统中,未运行的代码;
2.了解什么是进程?
在一个操作系统中,真在运行的程序 就是进程;
运行起来的程序就是进程;
3.多进程?
多个进程 同时执行效果为 多进程,进程和进程之间执行的时候
相互不干扰
4.线程
线程是运行在进程中的 一个 子程序流,它占用
这个进程的内存,没有自己独立的运行内存;
5.多线程:
多线程是运行在同一个进程中的 多个 子程序流,
他们共用一个进程的内存,各个线程在执行时,相互不干扰
任何程序都由线程组成; 在执行程序的时候
一定会有一个线程执行它的任务,它的任务 也就是程序的任务;
程序在运行时 需要去 抢占CPU的使用权,并且分配操作系统的内存;
为什么要学习多线程?
让我们了解程序的内部结构,以及运行原理;
线程的作用就是 来完成程序中 需要完成的任务
线程和线程之间是 互斥的
java如何提供多线程的功能?
1.继承Thread 类:
迅雷下载的案例:
多个线程完成多个任务,线程和线程之间相互不干扰
Thread类被称为线程类:
1.currentThread(); 代表当前线程的对象
主线程 名字为 main线程
子线程在run方法体中执行
Thread.currentThread().getName(); 获取的是thread-0,thread-1,thread-2
2.getName(); 获取线程的名字
setName(); 设置名字
3.getId(); 获取线程ID
4.getPriority(); 1低 5中 10高
优先级越高 ,抢占到cpu的使用权越大
setPriority(int value);
5.isAlive();判断当前线程是否活着
*** 6.isDaemon();判断是否是 守护线程
7.join(); 强行加入
8.run(); 是线程体,只有主线程能运行
9.start(); 启动线程的方法,jvm虚拟机 执行run方法
10.sleep(long millis);让当前正在执行的线程进入阻塞状态 ,不释放资源
11.yield(); 让步
线程的生命周期:
阻塞blocking
sleep时间片结束 调用sleep();
调用join()的线程执行完毕 调用join();
新建new ---> 就绪run -------> 运行 start() -----> 销毁death
sleep和yield方法的区别?
答:
1.sleep方法 有异常 ,yield没有异常
2.sleep方法 有时间参数, yield没有入参
3.sleep方法 不会考虑线程的优先级问题
所以低优先级线程有抢占cpu的使用权较大
yield方法 考虑 线程 优先级的,它会让 与它线程优先级同等级的
或高优先级的线程 优先执行
4.sleep适用于正式的应用场景,
yield方法适用于测试场景,效率高 ,没有等待感
5.sleep会让当前线程进入到阻塞状态
yield不会让线程进入到阻塞状态 ,会直接进入到就绪状态
join 让当前正在执行的线程进入到阻塞状态;
等待者线程执行完毕后 ,才会回复阻塞状态的线程继续执行;
守护线程: isDaemon();
守护线程 就是用于服务别的线程的 线程,
一般处于后台服务,运行在后台进程中,我们看不见
具有自动 结束生命周期的 能力,不受jvm虚拟机进程的影响
如果jvm虚拟机提前结束进程, 守护线程有可能依然存活
普通线程则不然,会直接销毁
GC 就一个守护线程 ,机制jvm迅即进程结束,它依然会
回收垃圾
守护线程必须在 线程 启动前 设置
帮助我们完成一些 后台任务
------------------------------------------------------------------------
2.实现Runnable接口
3.实现Callable接口
11 12