一、多线程的优势
- 资源利用率更好
- 程序设计在某种情况下更简单
- 程序响应速度更快
二、多线程的劣势
- 设计更复杂
- 增加上下文切换开销
- 上下文切换当CPU执行一个线程切换到另一个线程的时候,需要保存当前线程的本地数据,程序指针等,
然后载入另一个线程的本地数据以及程序指针等,最后才开始执行
- 上下文切换当CPU执行一个线程切换到另一个线程的时候,需要保存当前线程的本地数据,程序指针等,
- 增加资源消耗
三、竞态条件与临界区
当多个线程竞争同一个资源时候,对资源访问顺序敏感,就存在竞态条件。导致竞态发生的区域叫临界区
- 线程的执行是随机的
四、线程的创建
Java 的线程创建有两种方法
- 继承 Thread 类创建线程对象
- 实现 Runnable 接口类创建线程对象
注意:
在java中,每次程序运行至少启动2个线程。一个是main线程,一个是垃圾收集线程。因为每当使用java命令执行一个类的时候,实际上都会启动一个jvm,
每一个jvm实际上就是在操作系统中启动了一个进程。
五、线程的状态和优先级
状态
- new(新建)
- runnnable(可运行)
- blocked(阻塞)
- waiting(等待)
- time waiting (定时等待)
- terminated(终止)