2016-12-03 52 views
1

正如我们在Java中所知道的线程从调用start方法开始,当我们调用时,thread.wait()。它从跑步到等待状态,当我们叫睡时,它不会。谁维护Java中的线程状态从运行到等待/阻塞状态

我的问题是:谁管理从运行到等待或阻塞状态的状态转换?在Java中是否有的作用?

+0

JVM :) http://www.javatpoint.com/life-cycle-of-a-thread – firephil

+0

正如Alex指出的那样,操作系统负责阻塞线程。 'ThreadLocal'是一个完全不同的想法。我可以看到JVM缓存某些线程状态以实现更快的访问速度,但大部分线程执行的细节(运行,阻塞,就绪)都由操作系统直接处理。 – markspace

回答

1

线程管理是操作系统的一个领域。这是OS将线程置于等待状态并在需要时唤醒它。当然,有一个Java中间层将Java线程API转换为系统调用。因此您直接与JVM进行交互,但在桌面系统上,它将使用操作系统支持的线程实现线程。

请注意,可能会有不同的角落案例。例如,您可能有一个运行JVM的裸机系统,无需任何操作系统。在这种情况下,线程支持(如果有的话)将由JVM执行。还有一个绿色线程的概念,它与通常的线程类似,但在没有OS支持的应用程序内进行管理。

+0

嗨阿列克谢,因为你说它是类似的绿色线程是在Java 1.2中引入的,后来删除可以请你分享任何资源。 –

+0

我不熟悉在Java中实现该功能,所以我不能指出你一个很好的文档。但这是相当流行的想法,可以在许多现代语言中找到。它可以被称为协同程序,greenlets,纤维,异步。主要思想是如果不需要公平调度,同时执行和内存保护,则可以在应用程序内部更快地在这些特定线程之间切换。操作系统不知道他们,它认为你执行一个单一的线程。 –

1

谁管理从运行到等待或阻塞状态的状态转换? 在Java中有threadLocal的任何角色吗?

JVM线程调度程序维护线程生命周期和不同线程状态(READY,RUNNING,WAIT等),即从线程创建直到线程终止。它是线程调度程序,负责将线​​程状态从一个线程状态移动到另一个线程状态,即RUNNING到WAIT或RUNNING到READY等。

正如Alexey所提到的,在低层次上,线程将由操作系统(OS)。

ThreadLocal对象是局部的每个线程,可用于存储和检索的变量即,存储在ThreadLocal对象内部变量只对线程是可见的,并且不能用于其它线程访问。