JAVA中,线程有哪五个基本状态?他们之间如何让转化?并简述线程周期。

Python014

JAVA中,线程有哪五个基本状态?他们之间如何让转化?并简述线程周期。,第1张

java中,每个线程都需经历新生、就绪、运行、阻塞和死亡五种状态,线程从新生到死亡的状态变化称为生命周期。

用new运算符和Thread类或其子类建立一个线程对象后,该线程就处于新生状态。

线程的生命周期,把图转化为文字就是: 

1、线程通过new方法创建,调用start,线程进入就绪状态,等待系统的调度(时间片轮转调度)。当系统调度,进入运行状态。正常结束或者异常退出,进程进入死亡状态。

2、处于运行状态的线程若遇到sleep,则线程进入睡眠状态,不会让出资源锁,sleep结束,线程转为就绪状态,等待系统重新调度。

3、处于运行状态的线程可能在等待io,也可能进入挂起状态。io完成,转为就绪状态。

4、处于运行状态的线程yield,线程转为就绪状态。(yield只让给权限比自己高的)

5、处于运行状态的线程遇到wait,线程处于等待状态,需要notify()/notifyALL来唤醒线程,唤醒后的线程处于锁定状态,获取了“同步锁”,之后,线程才转为就绪状态。处于运行的线程synchronized,加上后 变成同步操作。处于锁定状态,获取了“同步锁”,之后,线程才转为就绪状态。

1、在 Java 中,线程是一个独立的执行路径。换句话说,一个线程是一个程序中的单独的执行环境,它可以并行地运行和其他线程。

2、多线程指的是在一个程序中,有多个线程在并行地运行。

3、多线程的一个特点是它们可以共享程序的资源,这样可以更有效地利用程序的资源,例如处理器时间和内存。此外,多线程还可以使程序更响应,因为在一个线程中运行的任务可以在另一个线程中进行,而不会导致程序“假死”。

线程的概念:Thread  每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。

多线程的概念:  多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。

多线程的特点:使用线程可以把占据长时间的程序中的任务放到后台去处理

用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 。

程序的运行速度可能加快  ·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。

在这种情况下我们可以释放一些珍贵的资源如内存占用等等。

线程定义比较抽象,简单的说就是一个代码执行流。许多执行流可以混合在一起由CPU调度。线程是允许各种任务交互执行的方式。

Java的线程在操作系统的实现模式依系统不同而不同,可能是系统级别的进程或线程,但对于程序员来说并没有影响。

任务交互的一个好处是增加程序响应。如一个界面程序执行一段耗时的数据库查询,使用单独的线程可以让界面依然响应用户的其他输入,而单线程只能等待查询结束再处理。

JVM以及操作系统会优先处理优先级别高的线程,但不代表这些线程一定会先完成。设定优先级只能建议系统更快的处理,而不能强制。

另外,在运行时,并没有按照函数分界,而是按照机器码/汇编码分界。也就是说不保证任何一段代码是被完整而不打断的执行的(除非你已经使用同步手段)。正由于如此,各种线程同步的方法应运而生。