java随手笔记之九之IO和线程

Posted 大海问天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java随手笔记之九之IO和线程相关的知识,希望对你有一定的参考价值。

IO:进行数据的读写操作。
输入流:源头----》应用程序,read
输出流:应用程序(源头)---》目的地,write
 
字节流:
InputStream,OutputStream
字符流:
Reader,Writer
 
 
read:
1.创建输入流对象,与要读取文件相关联
2.读取文件内容
3.关闭流
write:
1.创建输出流对象,与要写入数据的文件相关联
2.将数据写入到文件
3.关闭流
 
字符包装流对象:
BufferdReader:String readLine(),null
BufferdWriter:newLine()
 
字节包装流对象:
ObjectInputStream
ObjectOutputSream :可以进行基本类型数据和对象数据读写操作
 
File对象:
用来封装文件或者目录的信息,比如路径名,文件名等信息。
如果想要对文件进行读写操作只能使用IO,File本身不能进行读写操作,只是封装信息。
 
序列化:将对象按照字节进行存储 ----写
反序列化:将存储的对象重新还原 ----读
标准类库中大多数对象都可以进行序列化,比如:包裹类,String,数组,集合等。
 
序列化的规则:
1.序列化只将字段值进行序列化,构造器和方法不进行序列化
2.如果序列化对象中使用了另一个对象,那么该对象也进行序列化
3.如果对象与系统操作有关,那么该对象不能进行序列化
4.静态成员变量不参与序列化。
 
自定义对象序列化,必须实现Serializable接口
如果某一个字段不想要序列化,用transient修饰即可。
 
控制台设备:
标准输入设备:键盘 System.in ==== InputStream
标准输出设备:终端窗口 System.out ==== PrintStream
标准错误设备:终端窗口 System.err ==== PrintStream
 
转换流对象:
InputStreamReader:将字节输入流转成字符输入流
OutputStreamWriter:将字节输出流转成字符输出流
 
InputStreamReader(InputStream in)
OutputStreamWriter(OutputSream ou)
Scanner:java.util包中,是扫描器,能扫描简单的文件数据(基本类型或者是String)
是按照字段形式进行扫描,遇到分隔符返回数据(空格,制表符,回车换行符)
被扫描的对象:
File对象,字节流,字符流,String
 
 
printf("格式化码",参数1,参数2,....);
格式化码的标准语法:
%[-][0][长度].[精度]<格式化码>
eg:%,8d:此时“,”代表的是千位分隔符
 
%s,%b,%d,%o,%x(%X),%c,%n,%%
注意:如果指定的长度小于实际长度,按照实际长度输出
默认右对齐,空格补位
线程: cpu执行的是一个应用程序中的某个线程,执行多个线程的时候,cpu在做着高速切换的动作
一个进程有多个线程 一个进程中只有一个线程 叫单线程。
jvm 是进程 main 方法是主线程 main里面多个独立代码片段 即多个子线程。
cpu切换线程是根据线程的优先级(1-5-10)cpu在哪个线程执行的次数不确定。
创建线程:
1.定义类实现 runnable接口 并覆盖run方法 run方法中封装子线程的代码
2.第一步的对象作为参数 传递给 java.lang.thread
3.调用thread的start()方法 启动线程
自定义创建线程:0自定义类 继承 thread 类
获取线程名称:
thread。currentthread()静态方法 获取当前线程所有对象 对象。getname()获取名称。
线程生命周期:
新建(new thread)---可运行(start)--堵塞 (sleep)--正在运行(run)(对象的锁池)-wait()和notify()阻塞对象的等待池--终止(run结束)
多线程中 可运行与正在运行循环
 
停掉线程:
通知方式停掉线程
子线程创建一个实例变量或者封装变量true或false 提供set 方法 main方法中对象调用 方法
唤醒:
主动唤醒: 等thread。sleep(1000) 指定时间 静态方法sleep
被动唤醒:调用interrupt()实例方法
 
多线程共享数据安全问题:
多个线程执行操作的是同一个run方法时
可能会出现脏数据 一个线程执行run方法没有执行完 另一个线程参与执行
脏数据解决:同步语句块{} synchronized(this)同步锁其他对象进不来
当synchronized 语句结束后 几下几种情况 锁标记被释放回对象
1.线程正常执行至语句块的末端
2.语句块中抛出了异常
3.语句块中遇到了break 语句 或者return语句。
前提 多线程 同一个对象
stick{} 静态语句块语句块 类加载语句块 main方法之前执行 jvm编译随着类加载而执行
{int age = 20} 语句块放在方法内 只执行一次就消失。
多线程基于资源的交互:
线程对象1 wait()等待 让出线程使用权
线程对象2 notify()立即唤醒线程1
wait和notify方法必须同步被同一把锁池对象调用。
notifyall 唤醒所有的线程

以上是关于java随手笔记之九之IO和线程的主要内容,如果未能解决你的问题,请参考以下文章

java随手笔记之八集合泛型

java随手笔记六之异常

java随手笔记二之继承

java随手笔记三之多态

java虚拟机随手笔记虚拟机字节码执行引

随手笔记