Wątki - pytanie o uruchamianie

0

Dlaczego ponizszy kod po skompilowaniu i uruchomieniu daje taki wynik jaki daje a nie taki jaki mozna oczekiwac (przynajmniej ja innego oczekiwalem) ?

public class Test
{	
	public static void main(String args[])
	{
		Thread t = new Thread(new B(), "T1").start();
	}
}

class A implements Runnable
{
	public void run()
	{
		System.out.println(Thread.currentThread().getName());
	}
}

class B implements Runnable
{
	public void run()
	{
		new A().run();
		new Thread(new A(), "T2").run();
		new Thread(new A(), "T3").start();
	}
}
0

Bardzo ciekawy sposób zadawania pytania :D. Jeśli chcesz odpalić wątek nie możesz wywoływać metody run(). Jest ona wywoływana niejawnie przez metodę start().

0

A jakiego wyniku oczekiwałeś? :)

Pomijając fakt, że ten kod się nie kompiluje (linia nr 5: start() zwraca void a nie Thread), nie powinno się wywoływać bezpośrednio metody run ponieważ to powoduje jej wywołanie w bieżącym wątku stąd te dwie linijki:

new A().run();
new Thread(new A(), "T2").run();

wyświetlają "T1".

0

Nie mozna korzystac z run() ale tylko umownie :)

Sorry za blad w kodzie, zamiast linijki:

Thread t = new Thread(new B(), "T1").start();

powinno byc:

new Thread(new B(), "T1").start();

Oczekiwalem wyniku T1T2T3.

Ciekawi mnie fakt ze przy tworzeniu watku B tworzony jest watek A i on wypisuje T1 jako aktualny watek (czy meotda ta wypisuje aktualny watek w ktorym wywoluje sie ta metode ?). Dlaczego, skoro new Thread(new B(), "T1").start(); nie zostal uruchomiony bo nie zostal jeszcze stworzony.

Co do run i start to sie zgodze, powinno byc tylko start. Ale mala ciekawostka:
taki kod z pytaniem co zostanie wypisane na ekranie i kilkoma odpowiedziami w stylu T1T2T3, T1T1T3 itp mialem zadane na tescie na studiach (przedmiot programowanie obiektowe - watki i wyjatki). Zastanawiam sie jaki jest sens takiego pytania bo jest ono po prostu glupie :]

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