I/O流 及 线程安全

1.I/O流
1.1 PrintStream类(重点)
(1)基本概念
java.io.PrintStream类主要用于方便地打印各种数据并具有自动刷新的功能。

(2)常用的方法

1.2 BufferedReader类(重点)
(1)基本概念
java.io.BufferedReader类主要用于从字符输入流读取单个字符、字符数组及字符串

(2)常用的方法

1.3 ObjectOutputStream类(重点)
(1)基本概念
java.io.ObjectOutputStream类主要用于将Java语言的对象整体写入输出流中。
只能将支持 java.io.Serializable 接口的对象写入流中。
类通过实现 java.io.Serializable 接口以启用其序列化功能。
所谓序列化是指将一个对象需要保存的所有相关信息有效组织成字节序列的转化过程

(2)常用的方法

1.4 ObjectInputStream类(重点)
(1)基本概念
java.io.ObjectInputStream类主要用于从输入流中将Java语言的对象整体读取出来。

(2)常用的方法

经验分享:
在以后的开发中若希望写入多个对象时,建议先将多个对象放入集合中,然后将集合看做一个对象整体调用一次writeObject方法写入。
此时只需要调用一次readObject方法就可以将整个集合读取出来,从而避免了根据返回值进行文件末尾的判断。

2.线程
2.1 基本概念
程序 - 数据结构 + 算法,主要指存放在硬盘上的可执行文件。
进程 - 主要指运行在内存中的程序。

目前主流的操作系统都支持多进程,为了让操作系统同时执行多个任务从而提高效率,但进程是重量级的,新建进程对系统资源的消耗比较大,因此进程的数量比较局限。
线程是进程内部的程序流,也就是操作系统中支持多进程,而每个进程的内部又可以支持多线程,并且线程是轻量级的,新建线程会共享所在进程的系统资源,因此以后的开发中都采用多线程技术。
目前主流的多线程技术采用时间片轮转法实现多线程的并发执行,所谓并发就是宏观并行,微观串行的机制。

2.2 线程的创建(重中之重)
(1)线程创建和启动的方式
java.lang.Thread类主要用于描述线程,Java虚拟机允许应用程序并发地运行多个执行线程,具体创建和启动方式如下:
a.自定义类继承Thread类并重写run方法,创建该类的对象来调用start方法。
b.自定义类实现Runnable接口并重写run方法,创建该类的对象作为实参构造Thread
类型的对象,使用Thread类型的对象调用start方法。

(2)相关方法的解析
Thread() - 使用无参的方式构造对象。
Thread(Runnable target) - 根据参数指定的接口引用来构造对象。

void run() - 若构造线程对象时使用Runnable对象,则调用该方法时最终调用 Runnable对象指向的run方法;
- 若构造该线程对象时没有使用Runnable对象,则调用该方法时啥也不做
void start() - 用于启动线程,Java虚拟机会自动调用该线程的run方法。

(3)原理分析
a.执行main方法的线程叫做主线程,而执行run方法的线程叫做子线程。
b.程序启动时只有主线程来执行main方法中的代码,当start方法调用成功之后,线程的个数由1个瞬间变成了2个,而新启动的线程去执行run方法的代码,而执行main的线程继续向下执行,两个线程各自独立运行互不影响,当run方法执行完毕后子线程结束,而当main方法执行完毕后主线程结束。
c.主线程和子线程的先后执行次序没有明确的规定,取决于系统的调度算法。

注意:
线程创建和启动的方式一相对代码简单,但Java语言中支持单继承,若该类继承Thread类后无法继承其他类,而线程创建和启动的方式二相对代码复杂,但该方式不影响该类继承其它类而且还可以多实现,因此以后的开发中推荐第二种方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值