You need to sign in or sign up before continuing.
Commit a2ec6221 authored by amira.alkatably's avatar amira.alkatably

first commit

parents
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
\ No newline at end of file
# Default ignored files
/shelf/
/workspace.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_19" default="true" project-jdk-name="19" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>PP-HW-02</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>19</maven.compiler.source>
<maven.compiler.target>19</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
\ No newline at end of file
public class SequentialCounter {
public static long sum(int start, int finish) {
long cnt = 0;
for (int i = start; i <= finish; i++) {
if(isPrime(i)) cnt++;
}
return cnt;
}
private static boolean isPrime(int number) {
if (number <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
}
package counters;
import worker.WorkPartitioner;
import worker.Worker;
public class PrimesCounter extends Worker {
protected long cnt;
public PrimesCounter(WorkPartitioner.Part part) {
super(part);
}
public long getCnt() {
return cnt;
}
protected boolean isPrime(int number) {
if (number <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
}
package counters;
import java.util.concurrent.Callable;
import worker.WorkPartitioner;
public class PrimesCounterCallable extends PrimesCounter implements Callable<Long> {
public PrimesCounterCallable(WorkPartitioner.Part part) {
super(part);
}
@Override
public Long call() throws Exception {
this.cnt = 0;
for (int i = start; i <= finish; i++) {
if(isPrime(i)) cnt++;
}
return cnt;
}
}
\ No newline at end of file
package counters;
import worker.WorkPartitioner;
public class PrimesCounterRunnable extends PrimesCounter implements Runnable{
private Thread thread;
public PrimesCounterRunnable(WorkPartitioner.Part part) {
super(part);
}
@Override
public void run() {
this.cnt = 0;
for (int i = start; i <= finish; i++) {
if(isPrime(i)) cnt++;
}
}
public void startThread() {
thread = new Thread(this);
thread.start();
}
public void joinThread() throws InterruptedException {
thread.join();
}
}
\ No newline at end of file
package counters;
import worker.WorkPartitioner;
public class PrimesCounterThread extends Thread{
private int start;
private int finish;
private long cnt;
public PrimesCounterThread(int start, int finish) {
this.start = start;
this.finish = finish;
}
public PrimesCounterThread(WorkPartitioner.Part part) {
this(part.getStart(), part.getFinish());
}
@Override
public void run() {
this.cnt = 0;
for (int i = start; i <= finish; i++) {
if(isPrime(i)) cnt++;
}
}
private boolean isPrime(int number) {
if (number <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
public long getSum() {
return cnt;
}
}
\ No newline at end of file
package parallelcounters;
import counters.PrimesCounterThread;
import worker.WorkPartitioner;
import java.util.ArrayList;
import java.util.List;
public class ParallelCounter0 {
public static long sum(int start, int finish, int threadCount) {
List<PrimesCounterThread> counters = new ArrayList<>();
List<WorkPartitioner.Part> parts = WorkPartitioner.partitions(start, finish, threadCount);
for (WorkPartitioner.Part part : parts) {
counters.add(new PrimesCounterThread(part));
}
for (PrimesCounterThread primesCounterThread : counters) {
primesCounterThread.start();
}
for (PrimesCounterThread primesCounterThread : counters) {
try {
primesCounterThread.join();
} catch (InterruptedException e) {
System.err.println("Thread cannot join!");
}
}
int sum = 0;
for (PrimesCounterThread primesCounterThread : counters) {
sum += primesCounterThread.getSum();
}
return sum;
}
}
package parallelcounters;
import counters.PrimesCounterRunnable;
import worker.WorkPartitioner;
import java.util.ArrayList;
import java.util.List;
public class ParallelCounter1 {
public static long sum(int start, int finish, int threadCount) {
List<PrimesCounterRunnable> counters = new ArrayList<>();
List<WorkPartitioner.Part> parts = WorkPartitioner.partitions(start, finish, threadCount);
for (WorkPartitioner.Part part : parts) {
counters.add(new PrimesCounterRunnable(part));
}
for (PrimesCounterRunnable CounterRunnable : counters) {
CounterRunnable.startThread();
}
for (PrimesCounterRunnable CounterRunnable : counters) {
try {
CounterRunnable.joinThread();
} catch (InterruptedException e) {
System.err.println("Thread cannot join!");
}
}
long sum = 0;
for (PrimesCounterRunnable counterRunnable : counters) {
sum += counterRunnable.getCnt();
}
return sum;
}
}
package parallelcounters;
import counters.PrimesCounterThread;
import worker.WorkPartitioner;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ParallelCounter2 {
public static long sum(int start, int finish, int threadCount) {
List<PrimesCounterThread> counters = new ArrayList<>();
List<WorkPartitioner.Part> parts = WorkPartitioner.partitions(start, finish, threadCount);
for (WorkPartitioner.Part part : parts) {
counters.add(new PrimesCounterThread(part));
}
//creating a pool of #threadCount threads
ExecutorService executor = Executors.newFixedThreadPool(threadCount);
for (PrimesCounterThread counter: counters) {
executor.execute(counter);
}
executor.shutdown();
//Waiting for all the thread to finalize
while (!executor.isTerminated()) {
//System.out.println("Processing....");
}
return counters.stream().mapToLong(PrimesCounterThread::getSum).sum();
}
}
package parallelcounters;
import counters.PrimesCounterCallable;
import worker.WorkPartitioner;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class ParallelCounter3 {
public static long sum(int start, int finish, int threadCount) {
//creating a pool of #threadCount threads
ExecutorService executor = Executors.newFixedThreadPool(threadCount);
List<PrimesCounterCallable> counters = new ArrayList<PrimesCounterCallable>();
List<WorkPartitioner.Part> parts = WorkPartitioner.partitions(start, finish, threadCount);
for (WorkPartitioner.Part part : parts) {
counters.add(new PrimesCounterCallable(part));
}
List<Future<Long>> results;
try {
results = executor.invokeAll(counters);
} catch (InterruptedException e) {
System.err.println("Cannot invoke the threads.");
return -1;
}
executor.shutdown();
long sum = 0;
for (Future<Long> future : results) {
try {
sum += future.get();
} catch (InterruptedException | ExecutionException e) {
System.err.println("Cannot get the results from threads.");
return -2;
}
}
return sum;
}
}
package parallelcounters;
import counters.PrimesCounterCallable;
import worker.WorkPartitioner;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class ParallelCounter4 {
public static long sum(int start, int finish, int threadCount) {
//creating a pool of #threadCount threads
ExecutorService executor = Executors.newFixedThreadPool(threadCount);
List<Future<Long>> results = new ArrayList<Future<Long>>();
List<WorkPartitioner.Part> parts = WorkPartitioner.partitions(start, finish, threadCount);
for (WorkPartitioner.Part part : parts) {
results.add(executor.submit(new PrimesCounterCallable(part)));
}
executor.shutdown();
while (!executor.isTerminated()) {
//System.out.println("Processing...");
}
long sum = 0;
for (Future<Long> future : results) {
try {
sum += future.get();
} catch (InterruptedException | ExecutionException e) {
System.err.println("Cannot get the results from threads.");
return -2;
}
}
return sum;
}
}
package worker;
import java.util.ArrayList;
import java.util.List;
public class WorkPartitioner {
public static List<Part> partitions(int start, int finish, int workerCount){
List<Part> parts = new ArrayList<>();
int size = finish - start + 1;
if (workerCount > size) workerCount = size;
int part = (int) Math.ceil( (double)size / workerCount);
for (int i = 0; i <workerCount ; i++) {
int s = i * part + start;
int f = Math.min((i+1) * part, size) + start - 1;
if(s <= f) parts.add(new Part(s, f)); else break;
}
return parts;
}
public static class Part {
private final int start;
private final int finish;
public Part(int start, int finish) {
this.start = start;
this.finish = finish;
}
public int getStart() {
return start;
}
public int getFinish() {
return finish;
}
}
}
package worker;
public abstract class Worker {
protected final int start;
protected final int finish;
public Worker(int start, int finish) {
this.start = start;
this.finish = finish;
}
public Worker(WorkPartitioner.Part part) {
this(part.getStart(), part.getFinish());
}
public int getStart() {
return start;
}
public int getFinish() {
return finish;
}
}
import counters.PrimesCounterThread;
import junit.framework.TestCase;
import org.junit.jupiter.api.BeforeAll;
import parallelcounters.*;
import worker.WorkPartitioner;
import java.util.List;
public class Tester extends TestCase {
private static int start = 0, finish = 1000000;
private static long result = SequentialCounter.sum(start, finish);
private static void testAll(int threadCount) {
assertEquals(result, ParallelCounter0.sum(start, finish, threadCount));
assertEquals(result, ParallelCounter1.sum(start, finish, threadCount));
assertEquals(result, ParallelCounter2.sum(start, finish, threadCount));
assertEquals(result, ParallelCounter3.sum(start, finish, threadCount));
assertEquals(result, ParallelCounter4.sum(start, finish, threadCount));
}
public void testSingleThread() {
testAll(7);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment