programowanie współbieźne

0

Witam Was. Ostatnio zacząłem się bawić Javą, bo mam potrzebę napisania programu, który będzie wykonywany współbieżnie, a chciałem się też nauczyć Javy jako języka, bo niesie ze sobą wiele dobrego. Dlatego właśnie nie piszę go w Adzie.

W necie znalazłem wiele przykładów pokazujących programy napisane wpółbieżnie, lecz nigdzie nie widziałem na tyle prostego, by pojąć podstawy.

Przeszukując fora i stronki doszedłem do wniosku, że najprościej:

  • napisać własną klasę, która dziedziczy po klasie Thread;
    -stworzyć metodę run(), która odpala cały wątek

Właśnie w ten sposób napisałem te moje wypocinki, ale obawiam się że nie działają na tyle współbieżnie (bo nie działają tak w cale) na ile chciałem.
Stworzyłem dwa obiekty klasy aktor, które docelowo, miały operować w tym samym czasie na jednym obiekcie klasy element, raz go zajmując, zwalniając, lub czekając na zwolnienie.

public class proba {

	class element
	{
		boolean wolny;
		element()
		{
			wolny=true;
		}
	}
	
	class aktor extends Thread
	{	
		int numer;
		
		void zajmij(element j)
		{	
			if (j.wolny==false)
			{
				System.out.print(this.numer);
				System.out.println(": nie moge zajac");
				while (j.wolny==false)
				{}
				j.wolny=false;
				System.out.print(this.numer);
				System.out.println(": zajalem");	
			}
			else
			{
				j.wolny=false;
				System.out.print(this.numer);
				System.out.println(": zajalem");
				int n=10000000;
				while (n!=0)
					n--;	
			}
		}
		void zwolnij(element j)
		{
			j.wolny=true;
			System.out.print(this.numer);
			System.out.println(": zwolnilem");
		}
		public void run(element j)
		{
			zajmij(j);
			zwolnij(j);
			zajmij(j);
			zwolnij(j);
		}
	}
	
	proba()
	{
		aktor a1 = new aktor();
		a1.numer=1;
		aktor a2 = new aktor();
		a2.numer=2;
		element nowy = new element();
		a1.start();
		a2.start();
	}
	
	
	public static void main(String[] args) 
	{
		proba p = new proba();
	}
}

Mógłby mi ktoś poradzić w jaki sposób napisać program, działąjący w ten sposób?

Z góry dzięki

0

Metoda run w interfejsie Runnable (który implementuje klasa Thread) nie przyjmuje żadnych parametrów. Twoja metoda run(int) nie nadpisuje standardowej pustej metody run() w klasie Thread.

PS:
Jeśli przeciążasz metody to dodawaj zawsze adnotację @Override. Jeśli przypadkowo popełnisz literówkę, albo zmienisz ilość parametrów to kompilator zasygnalizuje błąd. Dobre IDE samo powinno się pluć żeby tą adnotację dodać (obowiązkowo nie trzeba jej dodawać).

0

dzięki właśnie o to chodziło:)

zmieniłem na run() i zaczęło działać kolejno zajmując i zwalniająć

pozdro!

1 użytkowników online, w tym zalogowanych: 0, gości: 1