Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 此代码中创建了多少个线程?_Java_Multithreading - Fatal编程技术网

Java 此代码中创建了多少个线程?

Java 此代码中创建了多少个线程?,java,multithreading,Java,Multithreading,Executors.newFixedThreadPool(5)在池中创建5个线程,然后在循环中再创建100个线程。这种理解正确吗?然后池中的5个线程将执行100个工作线程队列中的每个线程 那么总共创建了105个线程?我原以为只创建了5个线程,但每个Runnable也是一个线程 ExecutorService executor = Executors.newFixedThreadPool(5); for (int i = 0; i < 100; i++) { Runnable wor

Executors.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();
ExecutorService executor=Executors.newFixedThreadPool(5);
对于(int i=0;i<100;i++){
Runnable worker=新WorkerThread(“+i”);
执行人,执行人(工人);
}
executor.shutdown();

不要将
线程
类与线程混淆。Java使用
Thread
类生成线程,但它不一定是一对一的映射

在代码中,您的
WorkerThread
类似乎是
Thread
的子类。然而,
Thread
也实现了
Runnable
,这就是您的
ExecutorService
使用它的方式。它只是在启动的5个线程中的一个线程内调用其
run()
方法

此代码中创建了多少个线程


执行器服务启动的所有线程

不要将
线程
类与线程混淆。Java使用
Thread
类生成线程,但它不一定是一对一的映射

在代码中,您的
WorkerThread
类似乎是
Thread
的子类。然而,
Thread
也实现了
Runnable
,这就是您的
ExecutorService
使用它的方式。它只是在启动的5个线程中的一个线程内调用其
run()
方法

此代码中创建了多少个线程


ExecutorService
启动的
A
Runnable
的所有线程都不是正在运行的线程。无论是
可调用的
还是
线程

只有当您
.start()
A
thread
(它将
.run()
A
Runnable
.call()
A
Callable
)时,才会在JVM级别创建线程;在那之前,它们只是普通的、规则的对象


当您使用
执行器时,它将管理
可运行的
可调用的
并在可以的时候启动“真实”线程。

可运行的
不是运行线程。无论是
可调用的
还是
线程

只有当您
.start()
A
thread
(它将
.run()
A
Runnable
.call()
A
Callable
)时,才会在JVM级别创建线程;在那之前,它们只是普通的、规则的对象

当您使用
执行器
时,它将管理
可运行的
可调用的
并在可以的时候启动“真实”线程

newFixedThreadPool(5)在池中创建5个线程,然后在循环中再创建100个线程。这种理解正确吗?然后池中的5个线程将执行100个工作线程队列中的每个线程

这是不对的。固定大小的线程池执行器将创建5个工作线程。您的100个
Runnable
s都被添加到这5个线程所从的队列中。因此,在任何给定时间,只有5个
Runnable
s正在执行。有5个线程(加上主线程,如果使用Swing,可能还有EDT,当然还有显式创建的任何其他无关线程)

我原以为只创建了5个线程,但每个Runnable也是一个线程

ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 100; i++) {
    Runnable worker = new WorkerThread("" + i);
    executor.execute(worker);
}
executor.shutdown();

Runnable
不是线程。顾名思义,
Runnable
,就是可以运行的东西。对于固定大小的线程池,它由池中的一个线程运行。根据(重点矿山)的文件:

Runnable接口应由其实例将由线程执行的任何类实现

ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 100; i++) {
    Runnable worker = new WorkerThread("" + i);
    executor.execute(worker);
}
executor.shutdown();
我相信您的困惑的根源可能是您的
Runnable
s被不恰当地命名为
WorkerThread
,即使它们不是线程。此外,
Thread
还实现了
Runnable
,这一事实可能会让您感到困惑。实际上,这从字面上意味着
线程
是一个
可运行的
,而不是
可运行的
是一个
线程
——而
线程
在启动之前甚至不是一个线程

newFixedThreadPool(5)在池中创建5个线程,然后在循环中再创建100个线程。这种理解正确吗?然后池中的5个线程将执行100个工作线程队列中的每个线程

这是不对的。固定大小的线程池执行器将创建5个工作线程。您的100个
Runnable
s都被添加到这5个线程所从的队列中。因此,在任何给定时间,只有5个
Runnable
s正在执行。有5个线程(加上主线程,如果使用Swing,可能还有EDT,当然还有显式创建的任何其他无关线程)

我原以为只创建了5个线程,但每个Runnable也是一个线程

ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 100; i++) {
    Runnable worker = new WorkerThread("" + i);
    executor.execute(worker);
}
executor.shutdown();

Runnable
不是线程。顾名思义,
Runnable
,就是可以运行的东西。对于固定大小的线程池,它由池中的一个线程运行。根据(重点矿山)的文件:

Runnable接口应由其实例将由线程执行的任何类实现

ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 100; i++) {
    Runnable worker = new WorkerThread("" + i);
    executor.execute(worker);
}
executor.shutdown();
我相信你困惑的根源可能是你的
Runnable
s的名字不恰当