java ThreadPoolExecutor 创建5个线程池每个线GeoResultsRedisGeoCommandsGeoLocationString程池平均分配list里面的数据GeoResultsRedisGeoCommandsGeoLocationString大小有500条
以下是使用Java ThreadPoolExecutor创建5个线程池,每个线程池平均分配list里面的数据,GeoResults<RedisGeoCommands.GeoLocation
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) {
// 创建一个包含500个元素的list
List<GeoResults<RedisGeoCommands.GeoLocation<String>>> list = new ArrayList<>();
for (int i = 0; i < 500; i++) {
list.add(new GeoResults<RedisGeoCommands.GeoLocation<String>>());
}
// 创建5个线程池
int poolSize = 5;
ThreadPoolExecutor[] pools = new ThreadPoolExecutor[poolSize];
for (int i = 0; i < poolSize; i++) {
pools[i] = new ThreadPoolExecutor(1, 1, 0, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
}
// 平均分配list里面的数据到5个线程池
int index = 0;
for (GeoResults<RedisGeoCommands.GeoLocation<String>> data : list) {
ThreadPoolExecutor pool = pools[index % poolSize];
pool.execute(() -> {
// 处理数据
// ...
});
index++;
}
// 关闭线程池
for (ThreadPoolExecutor pool : pools) {
pool.shutdown();
}
}
}
在上面的示例代码中,我们先创建了一个包含500个元素的list,然后创建了5个线程池。接着,我们使用一个循环遍历list里面的数据,并将数据平均分配到5个线程池中。最后,我们关闭了所有的线程池。在处理数据的代码中,你可以根据具体需求来编写逻辑。
原文地址: https://www.cveoy.top/t/topic/bVS9 著作权归作者所有。请勿转载和采集!