【问题标题】:Java thread conceptJava 线程概念
【发布时间】:2014-02-25 15:23:15
【问题描述】:

我没有使用线程的经验,我想检查一下我是否足够了解它们在 Java 和其他编程语言中的实现。

类被称为线程这一事实是否具有误导性? 我将线程理解为一个抽象概念,它是由处理器完成的具有顺序和含义的一组步骤。 然而,Java 线程对象(以及来自其他编程语言的类和结构)并不完全代表线程,因为它将控制权传递给监视器并且不执行整个抽象线程。 我对么?还是我对线程的理解不正确? (显然,我已经阅读了包括维基百科在内的几个定义,但我仍然不确定)

另外,OS 系统进程(尽管在 C 结构中实现)是否类似于 Java 线程?

【问题讨论】:

  • C 有线程,其工作方式与 Java 类似(除非 C 不使用类和对象)。

标签: java c multithreading operating-system


【解决方案1】:

我将线程理解为一个抽象概念,它是由处理器完成的具有顺序和含义的一组步骤。

我不是这么看的。线程是执行独立代码所需的管理框架。这可以是内核线程、用户线程,或者在这种情况下是 VM 线程。我不确定“顺序和含义”是什么意思,但线程可以执行任何代码。引用this page:

线程是 CPU 利用率的基本单位,由程序计数器、堆栈和一组寄存器(以及线程 ID)组成。

很好的定义。

然而,Java 线程对象(以及其他编程语言中的类和结构)并不完全代表线程,因为它将控制权传递给监视器并且不执行整个抽象线程。

我不确定我是否理解你的意思。 Thread 对象是 Java 管理独立实体的方式。它管理堆栈帧,帮助进行 VM 调度和管理,并与本机线程结构和 OS 调度程序密切相关。在 Java 中,Thread 对象当然是一个线程,但从技术上讲,也许你可以说它启动后就是一个线程。但无论哪种方式,这个词都不会误导——至少对我来说不是。

这与 Java File 表示磁盘上的文件的方式相同。当然,从技术上讲,它不是一个文件,但对于 Java,它是管理对磁盘文件的访问的类。与SocketInputStreamConsole 以及与外部操作系统实体相关的任何其他类相同。

另外,OS 系统进程(尽管在 C 结构中实现)是否类似于 Java 线程?

呃,有点?不确定“系统进程”是什么意思。也许您在谈论内核线程?无论如何,答案在很大程度上取决于所讨论的操作系统。显然,并非所有操作系统都是用 C 编写的。当然,JVM 与 Java 的本机端和操作系统一起工作来调度和管理线程。在启动Thread 对象后,对于大多数操作系统来说,Java 类和操作系统管理的用户线程之间存在一对一的关系。

【讨论】:

    【解决方案2】:

    Thread 对象确实代表了一个线程,因为它为您提供了一个句柄,您可以通过该句柄控制一个线程。显然,该对象是“特殊的”,因为它实例化了一个实际运行的执行线程,但它确实代表了那个线程。线程的 run 方法(或它调用的 runnable)定义了该线程将执行的操作序列,并确定线程将运行多长时间等。

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 2018-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多