Witam! :-)
Jestem świeży w współbieżności i nie bardzo wiem jak ją zastosować w javie...
Piszę program szukający liczb doskonałych i nie wiem jak zsynchronizować ze sobą metody:
getElem - pobiera następny element z tablicy
check - sprawdza czy pobrana liczba jest liczbą doskonałą
sort - metoda sorująca tablicę...
jest ktoś w stanie coś podpowiedzieć, dopisać, nakierować?
oto kod, który już napisałem:
class Watek extends Thread{
int[] m_Table;
int m_Elem;
int m_ElemIndexT;
//int ile_zostalo = Main.m_Table.length;
public Watek(int[] table){
m_Table = table;
}
public synchronized boolean getElem(int indexElem){
m_ElemIndexT = indexElem;
if (indexElem < m_Table.length){
m_Elem = m_Table[indexElem];
return true;
}else{
return false;
}
}
public synchronized void sort(){
int tmp;
for (int i = m_ElemIndexT; i < m_Table.length - 1; i++) {
if (m_Table[i] > m_Table[i + 1]) {
tmp = m_Table[i];
m_Table[i] = m_Table[i + 1];
m_Table[i + 1] = tmp;
}
}
}
public synchronized void check(){
int suma;
int i=m_Elem;
int b, j;
int half;
suma = 0; // zmienna pomocnicza suma.
half = (i+1)/2;
for(b=1; b<=half; b++)
{ // Sprawdzamy wszystkie liczby w pętli, od 1 do naszej obecnej "i"
if(i%b==0){ // sprawdzamy czy jest podzielnikiem i
suma+=b; // dodajemy ta liczbe do sumy
}
}
// Znaleziono liczbę doskonałą
if(suma==i){ // suma podzielników jest równa liczbie?
System.out.println("Liczba "+i+" jest liczba doskonala."); // Poinformuj, że liczba "i" jest liczbą doskonałą
Main.m_NextIndex++;
//ile_zostalo--;
}
// Liczba nie jest doskonała
else{
m_Table[Main.m_NextIndex] = m_Table[m_Table.length-1];
m_Table[m_Table.length-1]++;
sort();
}
//suma=0; // zerujemy zmienną pomocniczą "suma" dla tego przebiegu funkcji.
}
public void run(){
try {
sleep(10);
}
catch (InterruptedException ex){
}
while (getElem(Main.m_NextIndex)){
check();
}
}
}
public class Main {
static int m_NextIndex = 0;
static int[] m_Table;
public static void main(String[] args) {
int maxTable = 5; //wyszukujemy 5 liczb doskonałych
m_Table = new int[maxTable];
for (int i=0; i < m_Table.length; i++){
m_Table[i] = i+1;
}
for (int i=0; i < 5;i++){ //uruchamiamy 5 wątków
Watek w = new Watek(m_Table);
w.start();
}
}
}
Proszę o pomoc [browar]
wielkie dzięki :-)
Pozdrawiam serdecznie :)