多线程指的是在一个进程中,会有多条执行路径并发执行,其目的是为了提高程序的效率。例如:迅雷多线程下载、数据库连接池、分批发送短信等。下面将介绍多线程相关的一些基本概念:
一、并发与并行:
1. 并发:指两个或多个事件在同一个时间段内发生(交替执行)。
2. 并行:指两个或多个事件在同一时刻发生(同时执行)。
二、线程与进程:
1. 进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。
2. 线程:线程是进程中的一个执行单元(执行路径),负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,线程间互不影响,这个应用程序也可以称之为多线程程序。
Java程序的线程调度采用的是抢占式调度,线程优先级高先执行,同一优先级则随机选择一个。
三、主线程:
执行主(main)方法的线程。
JVM执行main方法时,main方法进入栈,JVM找操作系统开辟一条main方法通向CPU的路径,CPU通过该路径执行main方法,该路径就称为主(main)线程。
四、守护线程和非守护线程:
1. 守护线程:和主线程一起销毁的线程。例如GC线程。使用setDaemon(true)方法将线程设置为守护线程。
2. 非守护线程:和主线程互不影响。例如用户线程(用户自定义创建的线程,主线程停止,用户线程不会停止)。
五、同步与异步:
1. 同步:代码从上向下逐个执行,前面任务未完成无法进行下一执行任务。
2. 异步:开辟新的路径进行执行,多线程概念包含了异步
六、线程状态:

1. NEW(新建) :线程刚被创建,但是并未启动。还没调用start方法。
2. Runnable(可运行):线程可以在java虚拟机中运行的状态,可能正在运行自己代码,也可能没有,这取决于操 作系统处理器。
3. Blocked(锁阻塞):当一个线程试图获取一个对象锁,而该对象锁被其他的线程持有,则该线程进入Blocked状 态;当该线程持有锁时,该线程将变成Runnable状态。
4. Waiting(无限等待):一个线程在等待另一个线程执行一个(唤醒)动作时,该线程进入Waiting状态。进入这个 状态后是不能自动唤醒的,必须等待另一个线程调用notify或者notifyAll方法才能够唤醒。
5. Timed Waiting(计时等待):同waiting状态,有几个方法有超时参数,调用他们将进入Timed Waiting状态。这一状态 将一直保持到超时期满或者接收到唤醒通知。带有超时参数的常用方法有Thread.sleep 、 Object.wait。
6. Teminated(被终止):因为run方法正常退出而死亡,或者因为没有捕获的异常终止了run方法而死亡。