操作系统线程与Java线程的区别

操作系统线程与Java线程的区别

在计算机编程中,线程是一系列指令的简短序列,旨在由CPU在父进程之外进行调度和执行。程序中可以同时存在多个活动线程,在任务完成或应用关闭时关闭或挂起它们。支持多线程的CPU能够同时运行许多线程。以下是操作系统线程和Java线程之间的区别。

Java线程

在Java中,线程是程序运行时所遵循的路径或过程。所有程序通常都至少有一个主线程,这由JVM或Java虚拟机在程序执行开始时提供。主线程的控制权由主线程调用main()方法时交给它。

程序的执行线程称为线程。在Java虚拟机上运行的程序可以同时执行多个线程。每个线程都有一个不同的优先级。优先级顺序决定了哪些线程先运行。

线程对程序的功能至关重要,因为它允许在单个函数中执行多个操作。程序计数器、堆栈和局部变量通常对每个线程是唯一的。

Java提供了两种不同的构建线程的方法:继承java.lang.Thread类和实现Runnable接口。

继承Java.lang.Thread类

继承Thread类的新类生成了该类的一个实例,从而创建了一个线程。在run()方法中包含了Thread应该执行的功能。使用start()使线程变得可运行后,就可以创建一个新线程。在void run()过程中启动了一个新线程。

实现Runnable接口

这是创建线程的最简单方法。在这种情况下,开发一个类来实现Runnable接口和run()方法。始终将线程运行代码写在run()方法中。

使用start()方法调用void run()方法。当调用start()时,线程会被分配一个新的堆栈,然后调用run()方法将其引入程序。

什么是操作系统线程

线程是唯一的执行路径。作为小型进程,操作系统可以将其与其他线程一起调度运行。线程由操作系统生成和管理,与创建它们的程序共享内存和资源。这使得多个线程能够在单个应用程序中有效地协作和运行。

线程是进程中的单一序列流。由于线程与进程共享某些特征,它们通常被称为轻型进程。每个线程只是一个进程的一部分。在支持多线程的操作系统下,一个进程可能有多个线程。

线程类型

同一进程的每个线程使用不同的程序计数器、激活记录堆栈和一组控制块。使用线程可以提高程序的性能。

操作系统中存在两种不同的线程类型:内核级线程和用户级线程。

内核级线程

  • 操作系统在内核级别实现和控制线程。

  • 内核级线程使用系统调用实现,操作系统对其感知。

  • 与内核级线程相比,用户级线程的创建和管理更快。

  • 内核级线程的上下文切换速度较慢。

  • 无论一个内核级线程是否执行阻塞操作,对其他线程都没有影响。考虑Window Solaris。

  • 内核不知道用户级线程,因为它们是由用户实现和控制的。

用户级线程

  • 用户级线程由用户级库创建,操作系统对其不知道。

  • 与内核级线程相比,用户级线程更容易建立和维护。

  • 在用户级线程中切换上下文更快。

  • 如果只有一个用户级线程执行阻塞任务,整个进程将停滞不前。考虑Java线程,POSIX线程等。

Java线程和操作系统线程的区别

以下表格突出了Java线程与操作系统线程的区别 –

Java线程 OS线程
在Java的上下文中,线程是程序执行过程中的路径 操作系统可以处理的最小处理单元是线程
Java程序中至少有一个线程,称为主线程 一个进程可以有多个线程
在Java中,用户线程和守护线程是两种不同类型的线程 有两种不同类型的操作系统线程-用户级线程和内核级线程
当主线程在程序开始时调用main()方法时,由Java虚拟机 (JVM) 控制 操作系统负责管理它
线程通信通过wait()、notify()和notifyAll()方法来实现 线程可以更轻松地进行通信并交换公共信息
使用监视器来实现线程同步,使用同步块来进行阻塞 使用互斥量是实现线程同步的最常见方法
在Java虚拟机 (JVM) 中,线程调度器决定哪个线程应该运行。抢占调度和时间片轮转是两种类型 应用程序开发人员通过轻量级进程 (LWP) 将用户级线程 (ULT) 调度为内核级线程 (KLT)。 系统调度器调度内核级线程来执行各种不同的操作系统函数

结论

在JVM进程中运行的任何线程都被称为“Java线程”。尽管有各种线程ID,操作系统线程都是进程的一部分,并共享相同的进程ID和父进程ID。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程