执行者。newFixedThreadPool(5)在池中创建5个线程,然后在循环中再创建100个线程。这种理解正确吗?然后池中的5个线程将执行100个工作线程队列中的每个线程。
总共创建了105个线程?我原以为只创建了5个线程,但每个Runnable
也是一个线程。
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 100; i++) {
Runnable worker = new WorkerThread("" + i);
executor.execute(worker);
}
executor.shutdown();
不要将线程
类与线程混淆。Java使用Thread
类生成线程,但它不一定是一对一的映射。
在代码中,您的WorkerThread
类似乎是Thread
的子类。然而,Thread
也实现了Runnable
,这就是您的ExecutorService
使用它的方式。它只是在启动的5个线程中的一个线程中调用其run()
方法。
这段代码中创建了多少线程?
由执行器服务启动的所有线程。
Runnable
不是正在运行的线程。无论是可调用的
还是线程
。
只有在时,才会在JVM级别创建线程。start()
a线程
(它将.run()
aRunnable
或)。call()
aCallable
);在那之前,它们只是普通的普通物体。
当你使用执行器时,它将管理你的
可运行的
或可调用的
并在可以的时候启动“真正的”线程。
遗嘱执行人。newFixedThreadPool(5)在池中创建5个线程,然后在循环中再创建100个线程。这种理解正确吗?然后池中的5个线程将执行100个工作线程队列中的每个线程。
这是不对的。固定大小的线程池执行器将创建5个工作线程。您的100个Runnable
s都被添加到这5个线程所从的队列中。因此,在任何给定时间,只有5个Runnable
s正在执行。有5个线程(加上主线程,如果您使用Swing,可能还有EDT,当然还有您显式创建的任何其他无关线程)。
我以为只创建了5个线程,但每个Runnable也是一个线程。
Runnable
不是线程。顾名思义,Runnable
只是可以运行的东西。对于固定大小的线程池,它正由池中的一个线程运行。从Runnable
的留档(强调我的):
Runnable接口应该由其实例将由线程执行的任何类实现。
我相信您混淆的根源可能是您的Runnable
s被不恰当地命名为WorkerThread
,即使它们不是线程。此外,您可能会被Thread
也实现了Runnable
这一事实所困惑。事实上,这字面意思是Thread
是Runnable
,而不是Runnable
是Thread
-Thread
甚至不是线程直到它开始。
由于std::sort的时间复杂度为nlog(n),我们有(N1+N2....Nk)次迭代,因此我假设总的时间复杂度为O((N1+N2....+Nk)klog(k))。但是在每次迭代中,vector的大小可能会有所不同,所以我有点困惑。有人能证实这一点吗? 2.我还在leetcode论坛上看到了另一个使用“合并排序”思想的解决方案。它每次都合并两个链表。 我想知道这个解决方案的时间复杂度是多少?因
如果我把 nums 设置为 10000,那么每次都准确输出 20000。或者设置的值比 10000 要少时也能准确输出。如果我把 nums 设置为 100000,那么每次输出的值都好像是随机的,范围在 100000 到 200000 之间。 如果是因为线程之间执行顺序的问题导致输出不确定,那为什么当值为 10000 时输出的值是比较确定的?
可能重复: pthread\u创建的线程是否与内核线程相同? 我使用下面的代码来测试pthread_create函数可以创建的最大线程数。 输出是: 这是pthread_create函数可以创建的最大线程数吗? 此外,我使用以下命令查看系统允许的最大线程数: 号码是772432。 为什么我的程序的输出不等于的值? 我的操作系统是Fodaro 16,12核,48G RAM。
所以我不确定是0还是2。 如果有人知道请告诉我。
如果我们使用 那么创建了多少对象,它们驻留在哪里?
给出的代码打印1 0 12然后显示分段错误,尝试了很长时间来解决这个问题,但没有发现错误,请帮助:我没有看到分段错误的原因,一直在尝试用链表实现队列,尝试使用不同的编译器,但没有帮助。在给定的代码中,如果可能的话,请找出错误,并告诉我如何改进这段代码