if (!toBeInserted.isEmpty()) { jxMjKhTxService.batchInsert(toBeInserted); } if (!toBeDeleted.isEmpty()) { jxMjKhTxService.batchDelete(toBeDeleted); } 使用多线程,Java 详细代码高效
时间: 2024-02-14 19:10:12 浏览: 57
这是一个多线程的Java代码
好的,以下是使用多线程实现高效批量插入和删除的Java代码示例:
```
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class BatchInsertAndDelete {
private static final int THREAD_POOL_SIZE = 10; // 线程池大小
private ExecutorService executorService; // 线程池
public BatchInsertAndDelete() {
executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
}
public void batchInsert(List<Object> toBeInserted) {
int size = toBeInserted.size();
int batchSize = size / THREAD_POOL_SIZE;
List<List<Object>> subLists = new ArrayList<>();
for (int i = 0; i < THREAD_POOL_SIZE; i++) {
int fromIndex = i * batchSize;
int toIndex = i == THREAD_POOL_SIZE - 1 ? size : (i + 1) * batchSize;
subLists.add(toBeInserted.subList(fromIndex, toIndex));
}
for (List<Object> subList : subLists) {
executorService.execute(() -> {
// 执行插入操作
});
}
}
public void batchDelete(List<Object> toBeDeleted) {
int size = toBeDeleted.size();
int batchSize = size / THREAD_POOL_SIZE;
List<List<Object>> subLists = new ArrayList<>();
for (int i = 0; i < THREAD_POOL_SIZE; i++) {
int fromIndex = i * batchSize;
int toIndex = i == THREAD_POOL_SIZE - 1 ? size : (i + 1) * batchSize;
subLists.add(toBeDeleted.subList(fromIndex, toIndex));
}
for (List<Object> subList : subLists) {
executorService.execute(() -> {
// 执行删除操作
});
}
}
public void shutdown() {
executorService.shutdown();
}
}
```
使用方法:
1. 创建 BatchInsertAndDelete 对象。
2. 调用 batchInsert() 方法批量插入数据。
3. 调用 batchDelete() 方法批量删除数据。
4. 最后调用 shutdown() 方法关闭线程池。
注意事项:
1. 通过线程池将数据拆分成多个子列表,每个子列表交由一个线程处理。
2. 线程池大小 THREAD_POOL_SIZE 可根据实际情况进行调整。
3. 插入和删除操作的具体实现需要根据业务需求进行编写。
4. 多线程处理数据时需要考虑线程安全,例如使用线程安全的容器等。
阅读全文