多线程—相关基本概念

多线程指的是在一个进程中,会有多条执行路径并发执行,其目的是为了提高程序的效率。例如:迅雷多线程下载、数据库连接池、分批发送短信等。下面将介绍多线程相关的一些基本概念:


一、并发与并行:

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方法而死亡。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容