Работа, выполняемая циклом k
, может выполняться параллельно, поскольку измененные данные не перекрываются.
Просто делегируйте работу, выполненную телом цикла, потоку.
Самый простой способ - использовать параллельный поток Java 8, т. Е. Заменить цикл k
на:
final int ii = i; // since 'i' is not effectively-final
IntStream.range(ii + 1, N).parallel().forEach(k -> {
double alpha = matrix[k][ii] / matrix[ii][ii];
for (int j = ii; j < N; j++) {
matrix[k][j] -= alpha * matrix[ii][j];
}
});