Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中线程并发模拟多核CPU_Java_Multithreading - Fatal编程技术网

Java中线程并发模拟多核CPU

Java中线程并发模拟多核CPU,java,multithreading,Java,Multithreading,我正在尝试编写一个模拟多核cpu的程序 我们有3个线程将为我们完成核心任务 还有一些任务将按照FIFO(先进先出)顺序完成。 由于我对java中线程的概念还不熟悉,在对此进行了大量思考之后,我仍然不知道如何编写程序 我只是想知道如何用最简单的方法来实现这一点,以及必须使用哪些方法和类 我正在考虑使用wait(),notifyAll()之类的东西,但我不确定这是否有效 在这个程序中,就像在每一个步骤中,main方法都会打印出主时钟并递增,然后线程会根据主时钟的当前值决定是否必须打印某些内容(启动新

我正在尝试编写一个模拟多核cpu的程序

我们有3个线程将为我们完成核心任务

还有一些任务将按照FIFO(先进先出)顺序完成。 由于我对java中线程的概念还不熟悉,在对此进行了大量思考之后,我仍然不知道如何编写程序

我只是想知道如何用最简单的方法来实现这一点,以及必须使用哪些方法和类

我正在考虑使用
wait()
notifyAll()
之类的东西,但我不确定这是否有效

在这个程序中,就像在每一个步骤中,main方法都会打印出主时钟并递增,然后线程会根据主时钟的当前值决定是否必须打印某些内容(启动新任务、上下文切换)。 如果有任何提示,我将不胜感激

输出必须如下所示:

Task 2 : 6 time units
Task 3 : 9 time units
Task 4 : 10 time units
Task 5 : 10 time units
Task 6 : 8 time units
Task 7 : 7 time units

--------------------

Master Clock : 0
  Core 2 started its first task of 7 time units
  Core 0 started its first task of 9 time units
  Core 1 started its first task of 6 time units
Master Clock : 1
Master Clock : 2
Master Clock : 3
Master Clock : 4
Master Clock : 5
Master Clock : 6
  Core 1 started context switch
Master Clock : 7
  Core 2 started context switch
Master Clock : 8
  Core 1 started a new task of 9 time units
Master Clock : 9
  Core 2 started a new task of 10 time units
  Core 0 started context switch
Master Clock : 10
Master Clock : 11
  Core 0 started a new task of 10 time units
Master Clock : 12
Master Clock : 13
Master Clock : 14
Master Clock : 15
Master Clock : 16
Master Clock : 17
  Core 1 started context switch
Master Clock : 18
Master Clock : 19
  Core 1 started a new task of 8 time units
  Core 2 started context switch
Master Clock : 20
Master Clock : 21
  Core 0 completed a total of 2 tasks
  Core 2 started a new task of 7 time units
Master Clock : 22
Master Clock : 23
Master Clock : 24
Master Clock : 25
Master Clock : 26
Master Clock : 27
  Core 1 completed a total of 3 tasks
Master Clock : 28
  Core 2 completed a total of 3 tasks

您肯定应该学习更多关于Java中并发性的知识。这是一篇关于线程池和工作队列的文章,可以帮助您理解在Java中可以做什么-

根据您的描述,您似乎不需要(或应该需要)Java线程来进行此模拟。虚拟内核基于主时钟同步运行。您只需要一个代表主时钟的主循环,以及每个虚拟内核的操作队列。在每个主时钟步骤中,您确定并执行每个虚拟核心的操作。不需要真正的线程。

这个问题太笼统了。您可能应该花一些时间学习如何使用线程,思考您的问题所在,并了解它们之间的联系。就目前的情况而言,没有办法回答您的问题。我同意@vanza的观点,但为了给您一些关于从何处开始的提示,我将从学习如何使用线程(非常有用的概念)开始,然后看看如何利用线程解决您的特定问题。祝你好运