我正在做一个项目,我需要确保每个线程都在特定范围内工作。例如:
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
应该使用 id between1 and 10
并且second thread
应该使用 id between11 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 文档,但无法决定我应该在这里选择什么。
谢谢您的帮助。