作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在oracle数据库中有大量记录,需要对它们进行一些操作。应用程序获取 4 个参数作为输入。它们是“范围从”、“范围到”、“线程计数”和“ block 大小”。通过使用此参数,应用程序计算应分配给每个线程的记录数。当一个线程启动时,它会从数据库blockSize中按blockSize获取记录并进行一些操作,然后将记录保存到数据库的另一个表中。我在8个cpu的机器上用10,000条记录测试了该应用程序,并将线程数设置为8。没有问题。在真实环境中,有1,000,000条记录和16个cpu。通过在那里运行应用程序,并将线程数设置为 16 或 12,有些线程无法启动。没有错误或异常消息。他们只是从来没有 别跑。其他线程启动成功。有什么想法吗?
下面是准备线程的部分代码:
List list = new ArrayList();
Object[] records;
int allIDsSize = to - from + 1;
int segmentSize = Math.round(allIDsSize % threadsCount == 0 ? allIDsSize / threadsCount : allIDsSize / threadsCount + 1);
Semaphore semaphore = new Semaphore(0);
List<Future> threads = new ArrayList<Future>();
int k = 0;
while (k * segmentSize < allIDsSize) {
int from2 = segmentSize * k + 1;
int to2;
if (from2 + segmentSize - 1 < allIDsSize) {
to2 = from2 + segmentSize - 1;
} else {
to2 = allIDsSize;
}
k++;
MyThread thread = new MyThread(from + from2 - 1, from + to2 - 1, semaphore); //MyThread implements Callable<String>
if (log.isInfoEnabled()) {
log.info(String.format("Thread IDs are from %d to %d", (from + from2 - 1), (from + to2 - 1)));
log.info("thread started " + k);
}
Future<String> future = pool.submit(thread);
threads.add(future);
}
semaphore.acquire(threads.size());
谢谢。
Solr 马兹。
最佳答案
很可能某些线程在所有任务提交到执行器队列之前就完成了,因此执行器服务不必创建最大数量的线程(固定线程池根据需要创建新线程,最多可达限制,它不会一次创建所有线程)。
作为旁注:令人困惑的是,您将线程概念(thread
和MyThread
)用于真正的< em>任务,(即可运行
或可调用
)。
关于java - 并非所有 java 线程都启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7872225/
我是一名优秀的程序员,十分优秀!