首页 > 解决方案 > Java 线程立即终止

问题描述

我正在尝试使用 Java 中的线程进行一些并行 http 调用和数据库写入。问题是在调用 thread.start() 之后,线程并没有调用 run 方法,而是立即进入 TERMINATED 状态。

while (fromIndex < list.size()) {
                final int toIndex = fromIndex + batchSize > list.size() ? list.size() : fromIndex + batchSize;
                fromIndex += batchSize;
                final int fromIndexCopy = fromIndex;
                threads[i] = new Thread() {
                    @Override
                    public void run(){
                        processConsumptionHistory(requestContext, list.subList(fromIndexCopy, toIndex), listFinished,
                                listFailed, listEnd);
                        markFailedUsage(listFailed);
                    }
                };
                threads[i].start();
                i++;
            }

            for (final Thread thread : threads) {
                thread.join();
            }

为什么线程不运行?有更好的选择吗?

编辑

线程确实开始了,问题是传递的列表是空的。

标签: javamultithreading

解决方案


您可能想颠倒这两个语句的顺序:

fromIndex += batchSize;
final int fromIndexCopy = fromIndex;

推荐阅读