gpt4 book ai didi

java - 具有可调用的线程池

转载 作者:太空宇宙 更新时间:2023-11-04 11:02:45 24 4
gpt4 key购买 nike

我对可调用的 ThreadPool 方法感到震惊。我想找到数组中的大数字以及它出现的频率,所以我做了一切,但它显示错误。任何人都可以帮助我。谢谢。

import java.util.concurrent.Callable;
public class CallableMethod im``plements Callable<Integer>{

//@SuppressWarnings("unused")
private int[] num;

public CallableMethod(int [] num){
this.num = num;
}

public Integer call() throws Exception{

int n = num[0];
int frequency = 0;

for(int i=1; i< num.length; i++)
{

if(n < num[i]){
n = num[i];
}
}

for(int i = 1; i< num.length; i++){
if (n == num[i]){
frequency++;
}
}

//System.out.println("Largest Number is : " + num);
//System.out.println("frequency of occurence : " + frequency);
return frequency;
}
}

上面是我的 callabe() 代码,

import java.util.concurrent.*;
import java.util.*;

class ThreadPoolMethod {
// static ExecutorService pool = Executors.newFixedThreadPool(2);

public static void main(String[] args) {
ThreadPoolExecutor pool = (ThreadPoolExecutor) Executors.newFixedThreadPool(2);
int number[] = { 32, 43, 145, 53, 25, 98, 54, 32, 65, 63, 145, 98, 43, 23, 25, 98, 100, 102, 105, 123, 145,
122, 123, 11, 12, 1, 0, 123, 145, 145 };
ArrayList<Future<Integer>> future = new ArrayList<Future<Integer>>();
for (int j = 0; j < number.length; j++) {
Future<Integer> f = pool.submit(new CallableMethod(number));
future.add(f);
}
// create array to store results
int result[] = new int[number.length];
for (int j = 0; j < result.length; j++) {
try {
Future<Integer> f = future.get(j);
result[j] = f.get();
} catch (InterruptedException e) {
} catch (ExecutionException e) {
};
}
System.out.println("The Large Number in array is: " + n);
System.out.println("The : " + frequency);
pool.shutdown();
for(int x : result)
System.out.print(x);
}
}

这是我的线程池。拜托我很震惊。我无法将可调用工作调用到 ThreadPool 方法中。请帮助我

最佳答案

尝试在 java 8 上使用 Streams、CompletableFuture、ForkJoinPool 的示例

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ForkJoinPool;
import java.util.stream.Collectors;


public class DemoController {

public static void main(String[] args) {
ForkJoinPool forkJoinPool = new ForkJoinPool(2);
int number[] = {32, 43, 145, 53, 25, 98, 54, 32, 65, 63, 145, 98, 43, 23, 25, 98, 100, 102, 105, 123, 145,
122, 123, 11, 12, 1, 0, 123, 145, 145};
List<CompletableFuture<Integer>> future = new ArrayList<>();
for (int j = 0; j < number.length; j++) {
CompletableFuture<Integer> f = CompletableFuture.supplyAsync(() -> func(number), forkJoinPool);
future.add(f);
}
List<Integer> result = future.stream().map(f -> {
try {
return f.get();
} catch (Exception e) {
throw new RuntimeException(e);
}
}).collect(Collectors.toList());
forkJoinPool.shutdown();
result.forEach(System.out::println);
}

private static Integer func(int num[]) {
int n = num[0];
int frequency = 0;
for (int i = 1; i < num.length; i++) {
if (n < num[i]) {
n = num[i];
}
}
for (int i = 1; i < num.length; i++) {
if (n == num[i]) {
frequency++;
}
}
System.out.println("Largest Number is : " + n);
System.out.println("frequency of occurence : " + frequency);
return frequency;
}
}

关于java - 具有可调用的线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46718594/

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