package no.uio.ifi.task;
import java.util.HashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/* You are allowed to 1. add modifiers to fields and method signatures of subclasses, and 2. add code at the marked places, including removing the following return */
public class Main {
public static void main(String[] args) throws InterruptedException {
LinkedQueue inputQueue = new LinkedQueue<>();
LinkedQueue evenQueue = new LinkedQueue<>();
LinkedQueue oddQueue = new LinkedQueue<>();
HashMap> layer = new HashMap<>();
layer.put(true, evenQueue);
layer.put(false, oddQueue);
int n = 1000;
ExecutorService inputExc = Executors.newCachedThreadPool();
/* TODO: start n threads, each adding a single number to inputQueue */
Mapper mapper1 = new Mapper(layer) {
@Override
void transform(Integer input) {
/* TODO: take number and put it into the right queue */
}
};
Mapper mapper2 = new Mapper(layer) {
@Override
void transform(Integer input) {
/* TODO: take number and put it into the right queue */
}
};
ExecutorService distribute = Executors.newCachedThreadPool();
/* TODO: start n threads, each taking a single number from inputQueue to either mapper1 or mapper2
* each mapper must have the same amount of work
* the mapper must add its number to the correct queue*/
Reducer reducer1 = new Reducer() {
@Override
protected void reduce(Integer input) {
/* implement me */
}
};
Reducer reducer2 = new Reducer() {
@Override
protected void reduce(Integer input) {
/* implement me */
}
};
ExecutorService reduce = Executors.newCachedThreadPool();
/* TODO: start n threads, each taking one number from either queue and giving it to a reducer.
* Reducer 1 will only add even numbers, reducer 2 will only add off numbers */
Thread.sleep(2000);
System.out.println("Sum even: "+reducer1.current);
System.out.println("Sum odd: "+reducer2.current);
int total = 0;
for(int i = 1; i<= n; i++){
total += i*i;
}
System.out.println(total - (reducer1.current + reducer2.current));
}
}