Java多线程数组分离

Java多线程数组分离,java,arrays,multithreading,Java,Arrays,Multithreading,考虑到线程数,我需要分离一个数组。例如,我有数组[1][2][3][4][5][6][7][8][9][10]和用户打印线程计数,它们将与此数组中的元素一起使用。我的任务是在数组的元素和线程之间分配工作 线程计数=2->thread1:[1][2][3][4][5]thread2:[6][7][8][9][10]。 但是如果线程是例如7,我需要做什么。在这种情况下,如何分离工作?以下是将输入数组拆分为线程的示例应用程序: final int threadCount = 7; final int[

考虑到线程数,我需要分离一个数组。例如,我有数组[1][2][3][4][5][6][7][8][9][10]和用户打印线程计数,它们将与此数组中的元素一起使用。我的任务是在数组的元素和线程之间分配工作

线程计数=2->thread1:[1][2][3][4][5]thread2:[6][7][8][9][10]。
但是如果线程是例如7,我需要做什么。在这种情况下,如何分离工作?

以下是将输入数组拆分为线程的示例应用程序:

final int threadCount = 7;
final int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int from = 0;
for (int i = 0; i < threadCount; i++) {
    final int to = (from + (int) Math.ceil((a.length - from) / (double) (threadCount - i)));
    System.out.println("Thread #" + i + " will use " + Arrays.toString(Arrays.copyOfRange(a, from, to)));

    from = to;
}
输出:

Thread #0 will use [1, 2]
Thread #1 will use [3, 4]
Thread #2 will use [5, 6]
Thread #3 will use [7]
Thread #4 will use [8]
Thread #5 will use [9]
Thread #6 will use [10]

下面是将输入数组拆分为线程的示例应用程序:

final int threadCount = 7;
final int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int from = 0;
for (int i = 0; i < threadCount; i++) {
    final int to = (from + (int) Math.ceil((a.length - from) / (double) (threadCount - i)));
    System.out.println("Thread #" + i + " will use " + Arrays.toString(Arrays.copyOfRange(a, from, to)));

    from = to;
}
输出:

Thread #0 will use [1, 2]
Thread #1 will use [3, 4]
Thread #2 will use [5, 6]
Thread #3 will use [7]
Thread #4 will use [8]
Thread #5 will use [9]
Thread #6 will use [10]

[1][2][3][4][5][6][7][8][9][10]
是一个10维数组,而不是10个元素的单个数组
{1,2,3,4,5,6,7,8,9,10}
是一个包含10个元素的数组。将ExecutorService与具有所需线程数的线程池一起使用如何?Like ExecutorService pool=Executors.newFixedThreadPool(poolSize)。然后,您可以通过迭代数组并将每个元素作为参数提交给可运行任务来提交任务。看看
[1][2][3][4][5][6][7][8][9][10]
是一个10维数组,而不是10个元素的单个数组
{1,2,3,4,5,6,7,8,9,10}
是一个包含10个元素的数组。将ExecutorService与具有所需线程数的线程池一起使用如何?Like ExecutorService pool=Executors.newFixedThreadPool(poolSize)。然后,您可以通过迭代数组并将每个元素作为参数提交给可运行任务来提交任务。看看我更喜欢
Math.round()@Andreas math.round将不起作用,例如11个元素和10个线程。试试看。你甚至可以做
Math.floor()
。为什么第一个线程会得到所有的乐趣?@Andreas哦,你是对的,你可以做floor或round。你可以看到
ceil()
round()
,和
floor()
。我更喜欢
Math.round()
。-)@Andreas math.round将不起作用,例如11个元素和10个线程。试试看。你甚至可以做
Math.floor()
。为什么第一个线程会得到所有的乐趣?@Andreas哦,你是对的,你可以做地板或圆形。你可以在中看到
ceil()
round()
、和
floor()
之间的区别。