Witam
Jestem studentem informatyki i ostatnio na zajęciach z Javy dostałem takie zadanie:
Napisz program składający się z wątków : Dane, Delta, Pierwiastki, oraz klasy Main, liczący pierwiastki równania kwadratowego, bez używania mechanizmów synchronizacji. Dane - wprowadzanie danych z klawiatury, Delta - obliczenie delty, Pierwiastki - obliczenie pierwiastków równania kwadratowego, Main - uruchomienie wątków i wyświetlenie wyników. Sprawdź wyniki obliczeń czy są one poprawne? Zsynchronizuj pracę wątków z wykorzystaniem semaforów.Napisałem taki program
package lista5_zadania;
import java.util.Scanner;
public class Dane extends Thread{
public int a, b, c;
Scanner o = new Scanner(System.in);
@Override
public void run() {
System.out.println("Podaj a");
a = o.nextInt();
System.out.println("Podaj b");
b = o.nextInt();
System.out.println("Podaj c");
c = o.nextInt();
System.out.println("Parametr a wynosi: " +a+ "\n parametr b wynosi:" +b+ "\n parametr c wynosi: " +c);
}
public int getA() {
return a;
}
public int getB() {
return b;
}
public int getC() {
return c;
}
}
package lista5_zadania;
public class Delta extends Thread {
Dane d;
public Delta(Dane d) {
this.d = d;
}
double delta;
@Override
public void run(){
int a = d.getA();
int b = d.getB();
int c = d.getC();
delta = (b*b) - 4 * a * c;
}
public double getDelta() {
return delta;
}
}
package lista5_zadania;
public class Pierwiastki extends Thread{
Delta p1;
Dane p2;
public Pierwiastki(Delta p1, Dane p2) {
this.p1 = p1;
this.p2 = p2;
}
double x0, x1, x2, pier;
@Override
public void run(){
int a = p2.getA();
int b = p2.getB();
int c = p2.getC();
double delta = p1.getDelta();
pier = Math.sqrt(delta);
if(delta > 0 ) {
x1 = (-b - pier) / (2 * a);
x2 = (-b + pier) / (2 * a);
System.out.println("Pierwiastki równania kwadratowego to: \n x1: " +x1+ " x2: " +x2);
} else if (delta == 0) {
x0 = (-b) / (2 * a);
System.out.println("Pierwiastkiem równania kwadratowego jest: \n x0: " +x0);
}
}
}
package lista5_zadania;
public class Main {
public static void main(String[] args) {
Dane t1 = new Dane();
Delta t2 = new Delta(t1);
Pierwiastki t3 = new Pierwiastki(t2,t1);
t1.start();
t2.start();
t3.start();
}
}
Problem polega , że nie mogę zrozumieć jak użyć tych semaforów.Czy ktoś może mi to wytłumaczyć najlepiej na przykładzie?. Z góry dziękuję
pozdrawiam