快速了解Java多线程——线程的状态
一、什么是线程
操作系统在运行一个程序的时候会创建一个进程,进程是资源分配的最小单位,一个进程里面可以创建多个线程,这些线程都拥有自己的程序计数器、堆栈、局部变量等,线程们能够访问共享的内存变量(进程提供共享的资源)。处理器可以在线程之间进行高速切换,一个cpu某一时刻只能执行一个线程,但是高速情况下,给使用者感觉这些线程在同时执行一样。所以,线程是CPU调度的最小单位。
二、为什么使用多线程
-
处理器方面:现在的电脑都拥有多个cpu核心,并且cpu的运行速度非常快,所以我们开发程序也要充分利用硬件上的优势
-
响应时间方面:业务比较复杂的情况下,比如电商系统中的订单的创建,包含插入订单数据,生成订单快照,信息通知(卖家和买家)记录商品数量等,用户能够做的操作就是点击购买按钮,对于用户来说,要有更好的体验,则不能让用户等待太久,如果上边的流程是单线程执行的话,可能需要等上一小会儿,为了减少响应时间,我们采用多线程技术,将数据一致性不强的操作分给其他线程处理,或者采用消息队列(发送邮件、信息和生成快照)。
-
更好的编程模型:Java为多线程编程提供了良好、考究并且一致的编程模型,使开发人员更加专注于问题的解决。为遇到的问题建立合适的模型,让开发人员更加快捷地使用多线程。
三、线程的状态
网上的很多文章都是五种状态,其实这是操作系统中线程的五种状态。而Java线程状态有六种,Java将操作系统中的运行和就绪两个状态合称为运行状态。具体六种状态如下表所示:
状态名称 | 说明 |
---|---|
NEW(初始状态) | 线程刚被构建,但是还没有调用start()方法 |
RUNNABLE(运行状态) | ava系统系统中将操作系统中的就绪和运行两种状态笼统地称为“运行中” |
BLOCKED(阻塞状态) | 表示线程阻塞于锁 |
WAITTING(等待状态) | 表示线程进入等待状态,进入该状态表示当前线程做出一些特定动作(通知或者中断) |
TIME_WAITTING(超时等待状态) | 该状态不同于等待状态,它可以在指定的时间后自行返回 |
TERMINATED(中止状态) | 表示当前线程已经执行完毕 |
以下是六中状态之间的转换图:
该图明确的表示了线程由某一状态转化为另一个状态发生的条件。其中的绝大多数方法,都不是几笔就能概括的,笔者将在后边的文章中慢慢细说。
资料:《Java并发编程的艺术》