使用单CPU的java中的线程调度程序?

时间:2016-08-16 23:55:55

标签: java multithreading concurrency scheduler thread-synchronization

我一直在阅读java中的Thread调度程序在一个进程中一次只运行一个线程。

假设我们有一个JVM运行一台CPU机器。因此,如果我启动10个线程,它们将由同一个线程调度程序管理。

  1. 如果当时运行一个线程,那么该并发是什么?这不仅仅是一种并发幻觉吗?

  2. 我可以在同一个JVM下的单个进程中同时运行10个线程吗?

2 个答案:

答案 0 :(得分:3)

1-如果当时有一个线程运行,那么该并发是什么?这不仅仅是一种并发幻觉吗?

这既是幻想又是真实。两个任务在没有您干预的情况下相互交替。因此,它确实是并发的,对代码组织非常有用。如果没有线程为您执行切换,同时运行多个任务将是绝对的噩梦。

但是,单个处理器在任何给定时刻都不会运行多个线程,因为它一次只能执行一个操作,从这个意义上说它是一种错觉。

2-我可以在同一个JVM下的单个进程中同时运行10个线程吗?

是的。请参阅https://stackoverflow.com/a/7727922/998251

摘要:您有几千个线程可供您使用。

答案 1 :(得分:1)

这里有不同的工作方式。因此,单个cpu核心一次只能运行一个内核线程。可以为单个JVM进程运行多少内核线程取决于JVM。但是,即使使用单个内核线程,拥有多个Java线程也可以增加并发性。虽然每个线程都必须有时间片,但它允许非阻塞线程执行操作,而另一个线程阻塞则导致整体执行时间缩短。想象一下,线程A进行网络呼叫并等待结果。线程B可以在A等待并执行一些计算时接管。如果只是同步,则执行的计算B无法启动,直到网络调用返回。