Last active
June 30, 2016 03:02
-
-
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).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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