Skip to content

Instantly share code, notes, and snippets.

@benwrk
Last active June 30, 2016 03:02
Show Gist options
  • Save benwrk/07bfaa936f1654f99889dd35eaf5f2fc to your computer and use it in GitHub Desktop.
Save benwrk/07bfaa936f1654f99889dd35eaf5f2fc to your computer and use it in GitHub Desktop.
Part of 'Lab 12 - High Level Concurrency in Java' of the Computer Systems Laboratory course (01219215).
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Add numbers using ExecutorService.
*
* Part of Lab 12 - High Level Concurrency in Java, Computer Systems Laboratory course.
*
* @author Benjapol Worakan 5710546577
* @version 16.5.1
*/
public class ConcurrentAdder1 {
public static void main(String[] args) {
FileReader fileReader;
BufferedReader bufferedReader;
long sum = 0;
try {
fileReader = new FileReader("./data1G.txt");
bufferedReader = new BufferedReader(fileReader);
ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
int size = Integer.parseInt(bufferedReader.readLine());
System.out.println(size);
for (int i = 0; i < size; i++) {
sum += executorService.submit((Callable<Long>) () -> Long.parseLong(bufferedReader.readLine())).get();
System.out.println(i + "/" + size + ": " + sum);
}
bufferedReader.close();
fileReader.close();
} catch (IOException | InterruptedException | ExecutionException e) {
e.printStackTrace();
}
System.out.println("Final sum: " + sum);
}
}
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.concurrent.*;
/**
* Add numbers using ForkJoinPool.
*
* Part of Lab 12 - High Level Concurrency in Java, Computer Systems Laboratory course.
*
* @author Benjapol Worakan 5710546577
* @version 16.5.1
*/
public class ConcurrentAdder2 {
public static void main(String[] args) {
BufferedReader bufferedReader;
ForkJoinPool forkJoinPool = new ForkJoinPool(Runtime.getRuntime().availableProcessors() + 1);
long sum = 0;
try {
bufferedReader = new BufferedReader(new FileReader("./data1G.txt"));
int size = Integer.parseInt(bufferedReader.readLine());
System.out.println(size);
class Summation extends RecursiveTask<Long> {
private int i;
private long result;
Summation(int i) {
this.i = i;
}
@Override
protected Long compute() {
if (i < 2) {
try {
result = Integer.parseInt(bufferedReader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
} else {
Summation t1 = new Summation(i / 2);
Summation t2 = new Summation(i / 2);
t1.fork();
result = t2.compute() + t1.join();
}
System.out.println("Sum: " + result);
return result;
}
public long getResult() {
return result;
}
}
Summation t = new Summation(size);
forkJoinPool.invoke(t);
sum = t.getResult();
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Final sum: " + sum);
}
}
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ForkJoinPool;
/**
* Add numbers using ConcurrentHashMap's reduce().
*
* Part of Lab 12 - High Level Concurrency in Java, Computer Systems Laboratory course.
*
* @author Benjapol Worakan 5710546577
* @version 16.5.1
*/
public class ConcurrentAdder3 {
public static void main(String[] args) {
BufferedReader bufferedReader;
long sum = 0;
try {
bufferedReader = new BufferedReader(new FileReader("./data1G.txt"));
System.out.println("Parallel = " + ForkJoinPool.getCommonPoolParallelism());
ConcurrentHashMap<Integer, Integer> map = new ConcurrentHashMap<>();
int size = Integer.parseInt(bufferedReader.readLine());
System.out.println(size);
for (int i = 0; i < size; i++) {
map.put(i, Integer.parseInt(bufferedReader.readLine()));
}
sum = (long) map.reduceValuesToLong(4, (value) -> {
return value;
}, 0, (s1, s2) -> {
return s1 + s2;
});
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(sum);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment