美文网首页android学习笔记
操作系统的种状态切换图,搞懂操作系统的状态切换

操作系统的种状态切换图,搞懂操作系统的状态切换

作者: 鼾声鼾语 | 来源:发表于2020-06-19 14:11 被阅读0次
image.png

阻塞状态(Blocked)当任务等待某个事件或信号的时候处于此状态
挂起状态(Suspended)当任务被vTaskSuspend()函数禁止运行的时候处于此状态
就绪状态(Ready)当任务没有被阻塞或者挂起等待运行的时候处于此状态
运行状态(Running)当任务被内核调度执行的时候处于此状态

sleep和wait的区别:
当任务执行延时命令或者等待某个同步事件的时候便交出了自己的运行权,此时将处于阻塞状态(Blocked)。
sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。
一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。

一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,意思是等待时间即使到了,资源不够用也是没有用的。
等待是让出资源,在线程池等待,所以需要有一个notify唤醒线程,举例:

public class ThreadTestffd { 
    private Integer num = 0;
    private Integer result=0;
    public static void main(String[] args) {
        ThreadTestffd test = new ThreadTestffd();
        test.A();
        test.B();
    } 
    public void A() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("A线程准备");
 
 
                synchronized (result) {
                    System.out.println("A线程开始");
                    try {
                        result.wait();
                        //Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    for (int i = 0; i < 10; i++) {
                        System.out.println("a" +result++);
                    
                    }
                }
            }
        }).start();
    } 
    public void B() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("B线程准备");
            {
                    System.out.println("B线程开始");
//                  for (int i = 0; i < 10; i++) {
//                      System.out.println("b" +(result++));
////                        try {
////                            Thread.sleep(1000);
////                        } catch (InterruptedException e) {
////                            e.printStackTrace();
////                        }
//                  }
//    result++;                 
                    while(true)
                    {
                    num++;
                    if(num==3){
                        {                           
                            try {
                            Thread.sleep(100);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                            synchronized (result) //获取对象锁
                            {
                                System.out.println("numb"+num);
                                result.notify();//唤醒线程
                                break;
                            }   
                        }                       
                    }
                    else{
                        continue;
                    }                       
                }
                    }
            }
        }).start();
    } 
}

结果:线程a等待,开启线程b,当线程b将num累加到3的时候,唤醒线程a,同时结束线程b

拓展:如果添加的是,result.wait(1000);
这个时候就有一个优先过程,如果是b线程唤醒在前,那么就不用等待1s,如果是b线程sleep时间太长,那么a线程等待1s后直接直接执行a线程。

result.notifyAll();//唤醒所有线程,可以唤醒除了resut的锁。

相关文章

  • 操作系统的种状态切换图,搞懂操作系统的状态切换

    阻塞状态(Blocked)当任务等待某个事件或信号的时候处于此状态挂起状态(Suspended)当任务被vTask...

  • 计算机基础面试整理

    基础篇:操作系统、计算机网络 一:操作系统 1.进程的有哪几种状态,状态转换图,及导致转换的事件。 2.进程与线程...

  • Java 线程生命周期

    1. 线程状态 线程状态的转换会导致上下文的切换 1.1 操作系统层面(5种) 初始状态只是创建了线程对象,还未与...

  • java并发编程(三)java线程状态与方法

    一、线程的状态 1.1 操作系统层面 在操作系统层面有五种状态: 【初始状态】仅是在语言层面创建了线程对象,还未与...

  • linux常用命令(centos)

    其他命令init 0 关闭操作系统init 1 进入单用户模式init 3 切换终端模式init 5 切换图形界面...

  • 04_线程状态转换方法

    1、操作系统中的线程状态 操作系统中的线程状态有运行、就绪、等待三个关键状态 就绪状态(ready):线程正在等待...

  • Shell-系统分析

    分析Linux系统以及状态的监视,提取Linux操作系统信息,获取操作系统运行状态,分析应用状态nginx,mys...

  • 线程状态

    java线程与操作系统线程状态略有不同。 1. 操作系统底层线程状态: 课本经典五状态: 2. JAVA线程状态:...

  • Android MediaPlayer状态切换图

  • Java 线程的状态及状态转换

    通用的线程周期 操作系统中,线程的状态一般包含以下五种:初始状态、可运行状态、运行状态、休眠状态、终止状态 初始状...

网友评论

    本文标题:操作系统的种状态切换图,搞懂操作系统的状态切换

    本文链接:https://www.haomeiwen.com/subject/skvvxktx.html