If you want a simple parallel solution to your problem, something like this could work.
double[][] matrix=new double[numberOfRows][numberOfColumns];
double[][] transpose = new double[numberOfColumns][numberOfRows];
IntStream.range(0, numberOfColumns * numberOfRows).parallel().forEach(i ->
{
int m = i / numberOfRows;
int n = i % numberOfRows;
transpose[m][n] = matrix[n][m];
});
This uses a parallel IntStream, which you could think of as a parallelized for-loop that runs for the number of elements in the matrix. Notice that I assigned two variables to get the actual row and column I need to target for the transposition.
Dividing the index i the stream is currently at by the number of rows gives you the index of the target row in the transpose matrix. The modulo of index i and the number of rows gives you the column of the transpose matrix that should be assigned.