[Java] Metoda sleep()

0

Witam

Co się stanie jeśli komputer na ktorym jest wykonywany program jest zaopatrzony w wielordzeniowy procesor mogący wykonywać kilka wątków jednocześnie ? Który wątek jest usypiany przy pomocy sleep()? Szukałem odpowiedzi na te pytania, ale niestety nie znalazłem (może brak takich problemów u innych wynika z nierozumienia działania metody sleep ?) :(

0

sleep() to metoda statyczna klasy Thread, zatem usypiany jest zawsze biezacy watek. Jesli masz 4 rdzenie, na kazdym leci jakis watek, i kazdy z nich ma sleep(), to kazdy z nich zostanie uspiony.

0

Który wątek jest usypiany przy pomocy sleep()?
Ten, w który zostnie wykonana...

0
Keraj napisał(a)

Który wątek jest usypiany przy pomocy sleep()?
Ten, w który zostnie wykonana...

sleep(...) jest metodą statyczną, więc odnosi się do klasy a nie instancji. Pierwsza odp. jest całkiem sensowna.

0

Napisałem "w".

0
Keraj napisał(a)

Napisałem "w".

Czy mógłbyś rozwinąć myśl, bo albo ja czegoś nie rozumiem, albo Ty...

0

Chyba nic.. po prostu wyglądało jakbyś mnie poprawiał... jak dla mnie, jeśli coś dzieje się "w" wątku, to znaczy, że dzieje się pod jego kontrolą (jest on wątkiem bieżącym danej operacji). Wydaje mi się sensowne użycie przyimka "w". :)

0
Keraj napisał(a)

Chyba nic.. po prostu wyglądało jakbyś mnie poprawiał... jak dla mnie, jeśli coś dzieje się "w" wątku, to znaczy, że dzieje się pod jego kontrolą (jest on wątkiem bieżącym danej operacji). Wydaje mi się sensowne użycie przyimka "w". :)

Właśnie nie jest tak jak piszesz. Jak napisałem sleep(...) jest metodą statyczną i dotyczy klasy, a więc niekoniecznie musi dotyczyć danej instancji wątka (niezależnie czy by się wywoływało sleep(...) "pod" czy "nie pod" kontrolą danego wątku).

0

Nie rozumiesz mojego toku rozumowania ;) może po prostu złych słów używam
Tak, tak, gadamy zupełnie o tym samym... sleep jest metodą statyczną i zawsze jej działanie odnosi się do wątku bieżącego (czyli po mojemu: tego, w którym się to dzieje)
by the way.. nic nie może się dziać poza kontrolą jakiegoś wątku.

0
Keraj napisał(a)

Tak, tak, gadamy zupełnie o tym samym... sleep jest metodą statyczną i zawsze jej działanie odnosi się do wątku bieżącego (czyli po mojemu: tego, w którym się to dzieje)
by the way.. nic nie może się dziać poza kontrolą jakiegoś wątku.

Moje pytanie było o sytuację, w której mamy np. 4 bieżące wątki. Jeśli sleep(...) dotyczyłaba jedynie wątku w którym jest wywoływana, to nie mogłaby być statyczną. Jeśli napiszę w programie Thread.sleep(...) to spowoduję uśpienie np. wspomnianych 4 wątków, a nie tylko tego w którym wywołałem metodę.

0

Nie, nie... jeśli wywołasz Thread.sleep() uśpisz tylko bierzący wątek - nie ma to wpływu na inne.

Masz tu przykładowy kod, odpal i zobacz output

public class Watki {
	public static void main(String[] args) {
		new Thread()
		{
			public void run()
			{
				try {
					while(true)
					{
						System.out.println("Wątek jeden idzie spać");
						Thread.sleep(10000); // długo śpię
						System.out.println("Wątek jeden wstał");
					}
				} catch (InterruptedException e) {}
			}
		}.start();
		new Thread()
		{
			public void run()
			{
				try {
					while(true)
					{
						Thread.sleep(500); // przyśniemy tylko na chwilę, zeby nie zaspamowac konsoli
						System.out.println("Wątek dwa działa");
					}
				} catch (InterruptedException e) {}
			}
		}.start();
	}
}
0

hmmm... zgadza się :). Wynika to z tego, że każdy wątek ma oddzielny stos. W związku z tym.... Thread.sleep() powoduje uśpienie wątku z którego został wywołany ten sleep i nie ma zupełnie wpływu na inne wątki. Dzięki, pozdrawiam.

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