简体   繁体   中英

Threadpool with callable

I got struked with the ThreadPool method with callable. I want to find Large number in array as well Frequency of it occurence, so i did everything but it showing error. Anyone can help me. Thank you.

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;
    }
}

Above one is my callabe() code and

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);
    }
} 

This one is my ThreadPool. Please I'm struked. I cant call callable work into ThreadPool method.Please help me

Try to use this example on java 8 with 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;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM