gpt4 book ai didi

java - 使用多个线程填充静态数组

转载 作者:行者123 更新时间:2023-12-01 18:18:44 25 4
gpt4 key购买 nike

我正在尝试使用多个线程填充静态数组。 join()的建议用法在 https://stackoverflow.com/a/1492077/10418317似乎对线程施加了特定的顺序。如果可以的话我希望它们并行运行,以加快整个过程
分配

    public class Assigment {

public static int minPrime;
public static int maxPrime;
public static int[] masterMin = new int[10];
public static int[] masterMax = new int[10];
public static void main(String[] args) {
// TODO code application logic here

for(int i = 1; i < 11;i++){
Thread thread = new Thread(new NumGenerator(i));
thread.start();
System.out.println("Thread " + i + " generating nums");

}

Arrays.sort(masterMin);
Arrays.sort(masterMax);
minPrime = masterMin[0];
maxPrime = masterMax[9];
System.out.println("<------------------------------>");
System.out.println("Max Prime is " + maxPrime);
System.out.println("Min Prime is " + minPrime);
}

}


NumGenerator

public class NumGenerator implements Runnable {
int[] numbers;
int thrnum;
public NumGenerator(int thrnum){
this.thrnum = thrnum;
}
@Override
public void run(){
Random rand = new Random();
numbers = new int[3000];

for(int i = 0; i<3000; i++){
numbers[i] = rand.nextInt(899999)+1;

}
Searcher searcher = new Searcher(numbers);
Assigment.masterMax[thrnum-1] = searcher.max;
Assigment.masterMin[thrnum-1] = searcher.min;

}


我试图在每个线程完成输入后对数组进行排序,然后打印出第一个和最后一个,即最小值和最大值。问题是数组 masterMinmasterMax似乎在假定的人口之后仍然有所有零条目 Assigment.masterMin[thrnum-1] = searcher.min; Searcher 是另一个类,它实际上为我提供了 search.max 的非零值。和search.max正如预期的那样。

最佳答案

正如 @jhamon 所指出的,线程尚未完成。但是 @Sree 给出的方法并不理想,因为仅仅为了等待线程完成而关闭 Executor 并不是最好的方法。您可以尝试以下操作:

ExecutorService executor = Executors.newFixedThreadPool( 10 );
List<Callable<Object>> calls = new ArrayList<>();
for(int i = 1; i < 11;i++){
calls.add(Executors.callable(new NumGenerator(i)));
System.out.println("Thread " + i + " generating nums");
}
List<Future<Object>> futures = svc.invokeAll(calls);

invokeAll() 在所有任务完成之前(无论是执行失败还是成功完成)都不会返回。

关于java - 使用多个线程填充静态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60317524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com