📜  Java线程的运行状态和可运行状态的区别

📅  最后修改于: 2021-09-15 01:44:00             🧑  作者: Mango

线程是Java中多线程的支柱。多线程是允许同时执行程序的两个或多个部分以最大限度地利用 CPU 的功能。这种程序的每一部分都称为一个线程所以线程是进程中的轻量级进程。

一个线程在Java可以有多个状态,并且在执行的任何时候处于以下任一状态

  • 新的
  • 可运行
  • 跑步
  • 等待/阻塞
  • 终止/死亡

线程的可运行状态是线程准备好运行的状态称为处于可运行状态或换句话说等待其他线程(当前正在执行)完成其执行并执行自身。运行在当前的处理器执行的线程的状态处于运行小号大老地说道。线程调度程序有责任为线程提供运行时间。

多线程程序为每个单独的线程分配固定的时间量。每个线程运行一小段时间,然后暂停并将 CPU 交给另一个线程,以便其他线程有机会运行。

在这里,我们将讨论 Runnable 和 Running 状态之间的区别,因为大多数学习程序员对这两种状态感到困惑。以下是为了更好的清晰度和内部工作而提供的程序。

例子:

Java
// java Program to illustrate Difference between
// Running and Runnable states of Thread
 
// Importing input output classes
import java.io.*;
 
// Class 1
// Helper Class (extending main Thead class)
// Defining Thread1
class Thread1 extends Thread {
 
    // run() method for Thread1
    public void run()
    {
 
        // Display message only when thread1 starts
        System.out.println("Thread 1 started ");
 
        // Iterations
        for (int i = 101; i < 200; i++)
            System.out.print(i + " ");
 
        // Display message only when thread1 ended
        System.out.println("\nThread 1 completed");
    }
}
 
// Class 2
// Helper Class (extending main Thread class)
// Defining Thread2
class Thread2 extends Thread {
 
    // run() method for Thread 2
    public void run()
    {
 
        // Display message only when thread 2 starts
        System.out.println("Thread 2 started ");
 
        // Iterations
        for (int i = 201; i < 300; i++)
            System.out.print(i + " ");
 
        // Display message only when thread 2 ended
        System.out.println("\nThread 2 completed");
    }
}
 
// Class 3
// Helper Class (extending main Thread class)
// Defining Thread3
class Thread3 extends Thread {
 
    // run() method for Thread 3
    public void run()
    {
 
        // Display message only when thread 3 starts
        System.out.println("Thread 3 started ");
 
        // Iterations
        for (int i = 301; i < 400; i++)
            System.out.print(i + " ");
 
        // Display message only when thread 3 starts
        System.out.println("\nThread 3 completed");
    }
}
 
// Class 4
// Main Class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Try block to check for exceptions
        try {
 
            // Creating object of each of the threads
            // defined
            Thread1 thread1 = new Thread1();
            Thread2 thread2 = new Thread2();
            Thread3 thread3 = new Thread3();
 
            // Instructing thread to start the execution
            // using the start() method
            thread1.start();
            thread2.start();
            thread3.start();
        }
 
        // Catch block to handle the exceptions
        catch (Exception e) {
 
            // Print the line number where exception
            // occured
            e.printStackTrace();
        }
    }
}


输出:

注意:每次执行时,上述代码的输出不一定都相同,因为这取决于 CPU(线程调度程序)为处理器分配了哪个线程以及分配了多长时间。

输出说明:

为了在上述程序的上下文中理解这一点,请考虑何时使用301语句 正在打印这意味着线程3处于运行状态,但是线程1和线程2的状态是什么答案是, 同时,当thread3在处理器中被执行时,thread2和thread1正在等待轮到它们被处理或执行,即它们当前处于Runnable状态(或准备运行)。