Я работаю над проектом, в котором мне нужно убедиться, что каждый поток работает с определенным диапазоном. Например:
NO_OF_THREADS: 2
NO_OF_TASKS: 10
Если number of threads is 2
и number of tasks is 10
, то каждый поток будет выполнять 10 tasks
. Таким образом, это означает, что 2 потока будет выполнять 20 tasks
.
В реальном сценарии эти числа (количество задач и количество потоков) будут очень высокими, поскольку оба из них могут быть сконфигурированы в моем коде.
В приведенном выше примере first thread
должен использовать идентификатор между 1 and 10
и second thread
должен использовать идентификатор между 11 and 20
и так далее, если есть больше потоков. И после этого каждый поток будет создавать соединение с базой данных, а затем вставлять в базу данных.
Итак, у меня есть мой код ниже, который работает нормально.
public static void main(String[] args) {
final int noOfThreads = 2;
final int noOfTasks = 10;
//create thread pool with given size
ExecutorService service = Executors.newFixedThreadPool(noOfThreads);
// queue some tasks
for (int i = 0, int nextId = 1; i < noOfThreads; i++, nextId += noOfTasks) {
service.submit(new ThreadTask(nextId, noOfTasks));
}
}
class ThreadTask implements Runnable {
private final int id;
private int noOfTasks;
public ThreadTask(int nextId, int noOfTasks) {
this.id = nextId;
this.noOfTasks = noOfTasks;
}
public void run() {
//make a database connection
for (int i = id; i < id + noOfTasks; i++) {
//insert into database
}
}
}
Мой вопрос: -
Я просматривал различные статьи в Интернете, и я читал о newCachedThreadPool
. Так что теперь мне интересно - должен ли я использовать newFixedThreadPool
или newCachedThreadPool
в моем коде? В настоящее время я использую nexFixedThreadPool
. Я не могу решить, какие факторы следует выбрать newCachedThreadPool
или newFixedThreadPool
. Вот почему я опубликовал свой сценарий, что я буду делать с моим кодом.
Может кто-нибудь помочь мне, что я должен выбирать здесь? И, пожалуйста, подробно объясните мне, почему мы выбираем, какие факторы, чтобы я мог это понять. Я уже прошел через java-документы, но не смог решить, что мне выбрать.
Спасибо за помощь.