Java多线程无法正常工作

Java多线程无法正常工作,java,multithreading,Java,Multithreading,我正在使用带有4个线程的执行器 Executor exec = Executors.newFixedThreadPool(this.numOfThreads); Runnable requestHandler = new Runnable() { @Override public void run() { try { getImageForURL(spURL,

我正在使用带有4个线程的
执行器

Executor exec = Executors.newFixedThreadPool(this.numOfThreads);
        Runnable requestHandler = new Runnable() {
            @Override
            public void run() {
                try {
                    getImageForURL(spURL, 0);
                } catch (IOException ex) {
                } catch (Exception ex) {
                }
            }
        };
        exec.execute(requestHandler);
getImageForURL
中,我正在打印线程的名称,输出如下所示。输出看起来不正确,或者它应该是这样的吗

name=pool-1-thread-1
name=pool-2-thread-1
name=pool-3-thread-1
name=pool-4-thread-1
name=pool-5-thread-1
name=pool-6-thread-1
name=pool-7-thread-1
name=pool-8-thread-1
name=pool-9-thread-1
name=pool-10-thread-1
name=pool-11-thread-1
name=pool-12-thread-1
name=pool-13-thread-1
name=pool-14-thread-1

您每次都在创建一个新池(通过反复调用
newFixedThreadPool
)。您可能只想创建一次池(在启动程序时),然后向它提交多个
requestHandler

然后,输出应该如下所示:

name=pool-1-thread-1
name=pool-1-thread-1
name=pool-1-thread-2
name=pool-1-thread-1
name=pool-1-thread-1
name=pool-1-thread-2

如果池被充分利用,线程数将增加到4。

您每次都在创建一个新池(通过反复调用
newFixedThreadPool
)。您可能只想创建一次池(在启动程序时),然后向它提交多个
requestHandler

然后,输出应该如下所示:

name=pool-1-thread-1
name=pool-1-thread-1
name=pool-1-thread-2
name=pool-1-thread-1
name=pool-1-thread-1
name=pool-1-thread-2

如果池被充分利用,线程数将增加到4。

您希望循环仅围绕对
exec.execute(requestHandler)
的调用,而不是包含在其中的整个代码块,否则每次都会创建一个新的线程池

如果只循环调用
exec.execute(requestHandler)
,那么输出应该是这样的(语句的顺序可能会有所不同):


您希望循环仅围绕对
exec.execute(requestHandler)
的调用,而不是包含在其中的整个代码块,否则每次都会创建一个新的线程池

如果只循环调用
exec.execute(requestHandler)
,那么输出应该是这样的(语句的顺序可能会有所不同):


我在循环内部创建了执行器。将其从循环中取出并按照您提到的那样工作,thanksI在循环中创建了执行器。如您所述,它脱离了循环并正常工作,谢谢在您假设Java多线程不起作用之前,您应该假设您可能做错了什么。在您假设Java多线程不起作用之前,您应该假设您可能做错了什么。