Предположим, что у вас есть сетка G
из n x m
клеток, где n
и m
огромны. Кроме того, предположим, что у нас есть множество задач, каждая задача которых принадлежит одной ячейке в G и должна выполняться параллельно (в пуле потоков или другом пуле ресурсов).Пул потоков на ключ в Java
Однако задача, относящаяся к той же самой ячейке, должна выполняться серийно, то есть она должна ждать выполнения предыдущей задачи в одной и той же ячейке.
Как я могу решить эту проблему? Я искал и использовал несколько пулов потоков (Executors, Thread), но не повезло.
Минимальный Рабочий пример
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MWE {
public static void main(String[] args) {
ExecutorService threadPool = Executors.newFixedThreadPool(16);
Random r = new Random();
for (int i = 0; i < 10000; i++) {
int nx = r.nextInt(10);
int ny = r.nextInt(10);
Runnable task = new Runnable() {
public void run() {
try {
System.out.println("Task is running");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
threadPool.submit(new Thread(task)); // Should use nx,ny here somehow
}
}
}
Можете ли вы опубликовать код адаптера для этой сетки? – petey
FYI: проект [tag: netty] использует этот вид планирования в своем основном ядре – Ferrybig
Вы говорите, что в каждой ячейке есть список, содержащий много задач? Итак, это сетка, и каждая ячейка сетки - это список? –