一、多线程
进程:正在进行的程序
线程:进程中的执行路径
为网络流读取、IO读取、下载等任务量大耗时长的任务单独开发一个线程。
- 线程只能开启一次,运行完不能重新启动。
- 开启多线程的两种方法:继承Thread类覆写run、实现Runnable接口覆写run并用new Thread(对象).start(),前者是后者的的一个子类。Thread类很难达到资源共享(除非修改为静态变量),Runnable接口则可以使资源共享。
- 线程安全:多个线程同时运行和单线程运行的结果一样。
- 线程状态:创建–(start)—就绪—运行(run中)—-阻塞—–终止(运行结束时)
- 线程分为用户进程和守护线程,只剩下守护线程的时候就会退出。
- start方法和run方法:run方法只是一个普通方法,只有start才兵分两路。
- 线程的联合(join)和中断(interrupt)
-
- wait(睡眠,释放锁)与notify(唤醒第一wait)
- 同步代码:synchronized,锁的是对象而不是代码。
A. 无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。
B. 每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所控制的那段代码。
C. 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。
二、文件IO
- 文件操作类File
- 专门处理文件的类RandomAccessFile
文件内容的操作:
字节流:操作byte字节,二进制。InputStream和OutputStream(都是接口,实现类是FileInputStream和FileOutputStream)
字符流:操作字符和字符串等。Reader和Writer(都是抽象类,实现类是FileReader和FileWriter)、字符流的操作多了一个中间环节,用到了缓存区。管道流pipedInputStream和PipedOutputStream
文件操作流的流程
1、File类操作路径
2、实例化字节流/字符流的子类
3、读/写
4、关闭System类对IO的支持
in 对应键盘 InputStream类型
out 显示器 printStream类型- 对象序列化(Serializable):指在内存中的对象转化为二进制数据流形式,对对象进行传输和保存。