1.进程:应用程序的执行实例,有独立的内存空间和系统资源
进程是系统运行程序的基本单位,每一个进程的内部数据和状态都是完全独立的。
2.线程:CPU调度和分派的基本单位,进程中执行计算的最小单位,可完成一个独立的顺序控制流程
3.什么是多线程?
如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为“多线程”
4.多线程好处
充分利用CPU资源;简化编程模型;带来良好的用户体验
5.Thread类
Java提供了java.lang.Thread类支持多线程编程
6.主线程
main()方法即为主线程入口
产生其他子线程的线程
必须最后完成执行,因为它执行各种关闭动作
7.在Java中创建线程的两种方式
继承java.lang.Thread类:编写简单,可直接操作线程;适用于单继承
实现java.lang.Runnable接口:避免单继承局限性;便于共享资源
8.使用线程的步骤
定义线程——创建线程对象——启动线程——终止线程
9.线程的状态
创建状态、就绪状态、运行状态、阻塞状态、死亡状态
进程的状态:就绪状态、运行状态、等待状态
10.线程调度
线程调度指按照特定机制为多个线程分配CPU的使用权
方法 说明
setPriority(int newPriority) 更改线程的优先级
static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠
void join() 等待该线程终止
static void yield() 暂停当前正在执行的线程对象,并执行其他线程
void interrupt() 中断线程
boolean isAlive() 测试线程是否处于活动状态
11.线程优先级
线程优先级由1~10表示,1最小,5为默认优先级
优先级高的线程获得CPU资源的概率较大
12.线程休眠
让线程暂时睡眠指定时长,线程进入阻塞状态
睡眠时间过后线程会再进入可运行状态
public static void sleep(long millis)
millis为休眠时长,以毫秒为单位
调用sleep()方法需处理InterruptedException异常
13.线程的强制运行
使当前线程暂停执行,等其他线程结束后再继续执行本线程
14.线程的礼让
暂停当前线程,允许其他具有相同优先级的线程获得运行机会
该线程处于就绪状态,不转为阻塞状态
只是提供一种可能,但是不能保证一定会实现礼让
15.多线程共享数据引发的问题
多个线程操作同一共享资源时,将引发数据不安全问题
16.同步方法
17.线程安全的类型
方法是否同步 效率比较 适合场景
线程安全 是 低 多线程并发共享资源
非线程安全 否 高 单线程
18.常见类型对比
Hashtable && HashMap
Hashtable 继承关系:实现了Map接口,Hashtable继承Dictionary类
线程安全,效率较低
键和值都不允许为null
HashMap 继承关系:实现了Map接口,继承AbstractMap类
非线程安全,效率较高
键和值都允许为null
StringBuffer && StringBuilder
前者线程安全,后者非线程安全