让你学会与理解Java的线程与并发(四,线程状态)
Posted 韶光不负
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让你学会与理解Java的线程与并发(四,线程状态)相关的知识,希望对你有一定的参考价值。
欢迎大家观看,下面与小编一起来看看,接下来的学习吧!
线程状态
从操作系统分析 (五种状态)
初始状态 | 仅仅创建了线程对象,并没有与操作系统关联 |
可运行状态 | 创建了线程对象(与操作系统关联),可以用cpu调度执行 |
运行状态 | 获取cpu时间片运行中的状态,(当时间片使用完后(程序没有完成),线程会从运行状态返回可运行状态:导致线程上下文切换) |
阻塞状态 | 如果调用了阻塞的API,导致线程使用不了CPU,线程进行上下文切换,进入阻塞状态。(当阻塞API完成后,操作系统会重新唤醒线程,线程进入可运行状态) |
终止状态 | 当线程所有代码执行完毕,线程从运行状态到终止状态(到终止状态后,线程状态不会改变) |
Java PAI (六种状态,根据Therad.State 枚举分类)
TIMED_WAITING,WAITING,BLOCKED都是线程阻塞状态的细分
NEW (新的) | 线程刚刚被创建,没有调用start()启动线程 |
RUNNABLE (可运行的) | 调用start()启动线程,(Java可运行状态包括了操作系统的可运行,运行与阻塞状态。) |
BLOCKED (阻塞) | 一个正在阻塞等待一个监视器锁的线程处于这一状态。(I/O 的阻塞是不同的,它不是一般意义上的阻塞,而是特指被 synchronized 块阻塞,即是跟线程同步有关的一个状态。) |
WAITING(等待) | 当调用wait()方法调用后,线程进入TIMED_WAITING状态 |
TIMED_WAITING (定时 等待) | 当调用sleep()方法时,线程放弃cpu的使用权,线程进入TIMED_WAITING状态 |
TERMINATED (终止) | 当线程代码全部运行完成,线程从可运行状态到终止状态 |
练习:烧开水(华罗庚-统筹办法)
洗水壶(2分钟) ,煮开水 (20分钟) ,洗茶具(4分钟),找茶叶(3分钟)
用sleep()方法模拟等待时间,使用多线程设计方案。
public class Text
public static void main(String[] args) throws InterruptedException
Thread t1 = new Thread(()->
try
System.out.println("洗茶壶");
Thread.sleep(2000);
catch (InterruptedException e)
e.printStackTrace();
try
System.out.println("烧开水");
Thread.sleep(5000);
catch (InterruptedException e)
e.printStackTrace();
,"张三");
Thread t2 = new Thread(()->
try
System.out.println("洗茶具");
Thread.sleep(4000);
catch (InterruptedException e)
e.printStackTrace();
try
System.out.println("找茶叶");
Thread.sleep(3000);
catch (InterruptedException e)
e.printStackTrace();
try
t1.join();//等张三完成一起泡茶
catch (InterruptedException e)
e.printStackTrace();
System.out.println("可以了,泡茶了");
,"王五");
t1.start();
t2.start();
以上是关于让你学会与理解Java的线程与并发(四,线程状态)的主要内容,如果未能解决你的问题,请参考以下文章
让你学会与理解Java的线程与并发(二,创建运行与常见方法)