用Java实现有一批任务,创建二十个线程处理任务,每二十个任务提交一次,用线程和线程池两种方法实现
时间: 2023-07-17 20:07:08 浏览: 59
您好!以下是使用Java实现任务处理的代码示例,其中包括使用线程和线程池两种方法。
使用线程的方法:
```java
public class TaskProcessor implements Runnable {
private List<Task> tasks;
public TaskProcessor(List<Task> tasks) {
this.tasks = tasks;
}
@Override
public void run() {
for (Task task : tasks) {
// 处理任务的逻辑
task.process();
}
}
}
public class Main {
public static void main(String[] args) {
List<Task> tasks = generateTasks(); // 生成任务列表
int batchSize = 20;
int threadCount = tasks.size() / batchSize;
// 创建线程并启动
for (int i = 0; i < threadCount; i++) {
List<Task> batchTasks = tasks.subList(i * batchSize, (i + 1) * batchSize);
Thread thread = new Thread(new TaskProcessor(batchTasks));
thread.start();
}
}
}
```
使用线程池的方法:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TaskProcessor implements Runnable {
private List<Task> tasks;
public TaskProcessor(List<Task> tasks) {
this.tasks = tasks;
}
@Override
public void run() {
for (Task task : tasks) {
// 处理任务的逻辑
task.process();
}
}
}
public class Main {
public static void main(String[] args) {
List<Task> tasks = generateTasks(); // 生成任务列表
int batchSize = 20;
int threadCount = tasks.size() / batchSize;
ExecutorService executorService = Executors.newFixedThreadPool(threadCount);
// 提交任务给线程池
for (int i = 0; i < threadCount; i++) {
List<Task> batchTasks = tasks.subList(i * batchSize, (i + 1) * batchSize);
executorService.submit(new TaskProcessor(batchTasks));
}
// 关闭线程池
executorService.shutdown();
}
}
```
以上代码示例中,`Task`类表示待处理的任务,`TaskProcessor`类实现了`Runnable`接口用于处理任务。在主函数中,我们根据任务数量计算线程或线程池的数量,然后将任务分批提交给线程或线程池进行处理。