我在使用线程方面缺乏经验,我想检查一下我是否能够很好地理解它们在Java和其他编程语言中的实现。
类是否被称为线程误导? 我将线程理解为一个抽象概念,它是由处理器完成的一组步骤,具有顺序和含义。 然而,java线程对象(以及类和结构形成其他编程语言)并不完全代表线程,因为它将控制传递给监视器并且不执行整个抽象线程。 我对么?还是我错误地理解了线程? (显然,我已经阅读了包括维基百科在内的几个定义,但我仍然不确定)
此外,OS系统进程(尽管在C结构中实现)类似于Java线程吗?
答案 0 :(得分:2)
Thread对象确实代表一个线程,因为它为您提供了一个控制线程的句柄。显然,该对象是“特殊的”,因为它实例化了一个实际运行的执行线程,但它确实代表了该线程。线程的run方法(或它调用的runnable)定义了该线程将执行的操作序列,并确定线程运行的时间等等。
答案 1 :(得分:1)
我理解线程是一个抽象概念,它是由处理器完成的一系列步骤,具有顺序和含义。
这不是我的看法。执行独立代码所需的管理框架的线程。这可以是内核线程,用户线程,或者在这种情况下是VM线程。我不确定“命令和含义”是什么意思,但线程可以执行任何代码。引用this page:
线程是CPU利用率的基本单位,由程序计数器,堆栈和一组寄存器(以及线程ID)组成。
良好的定义。
然而,java线程对象(以及构成其他编程语言的类和结构体)并不完全代表线程,因为它将控制传递给监视器并且不执行整个抽象线程。
我不确定我理解你的观点。 Thread
对象是Java管理独立实体的方式。它管理堆栈帧,帮助VM调度和管理,并与本机线程结构和OS调度程序紧密结合。就Java而言,Thread
对象肯定是一个线程,虽然技术上可能你可以说它是一个启动后的线程。但无论哪种方式,这个词都没有误导性 - 至少对我没有误导。
这与Java File
表示磁盘上的文件的方式相同。当然,它在技术上不是一个文件,但对于Java来说,它是管理磁盘文件访问的类。与Socket
,InputStream
,Console
以及与外部OS实体绑定的任何其他类相同。
呃,有点?不确定你的“系统过程”是什么意思。也许你在谈论内核线程?无论如何,答案在很大程度上取决于相关的操作系统。并非所有OS'都是用C语言编写的。当然,JVM可以与Java的本机端和操作系统一起使用来调度和管理线程。在启动此外,OS系统进程(尽管在C结构中实现)类似于Java线程吗?
Thread
对象后,对于大多数OS',Java类和OS托管用户线程之间存在一对一的关系。