watki - wykorzystanie procesora

0

witam, czemu taki kod:

public class Test {
	public Thread t;
	
	public class T extends Thread {
		public T() {
			start();
		}
		public void run() {
			while(true){}
		}
	}
	public Test() {
		t = new T();
	}
	
	public static void main(String[] args) {
		Test test = new Test();
	}
}

zgodnie z informacja menadzera zadan windows wykorzystuje procesor na maxa??? mnie sie wydaje ze taki kod nie powinien tak obciazac procesor, jak w takim razie napisac watek ktory bedzie spelnial ta sama role ale nie obciazal tak procka ???

0

Taki watek zawsze bedzie uzywal procka na maxa :P przeciez wykonuje caly czas petle - czyli pracuje. Daj tam jeszcze sleep(milisekundy) z jakims odpowiednio dobranym czasem.

pozdrawiam
johny

0

ze pracuje to nie znaczy ze wykorzystuje procka na maxa, windows tez pracuje i nie wykorzystuje procka na maxa, ja potrzebuje zeby watek pracowal caly czas podczas zycia programu, sleep mnie nie ratuje, nie chcer go uspic, chce zeby caly czas kontrolowal wartosc pewnej zmiennej

0

ustaw Thread.MIN_PRIORITY. I tak obciążenie procesora będzie duże, ale system operacyjny będzie lepiej pracował

0

No ale chyba nie musi sprawdzac wartosci tej zmiennej co 'kazdy' takt procesora, nie? Jak ustawisz sleep na np. 20 ms, to wrazenie bedzie takie samo, a proc odpocznie. Windows dziala, ale nie zzera proca wlasnie dlatego, ze wie kiedy ma z niego korzystac. Poza tym opiera sie raczej na zegarku sprzetowym, wiec to troche inna bajka.

Jesli chodzi o priorytet to jest to tylko rekomendacja dla jvm, wiec moze zadzialac, ale nie musi.

pozdrawiam
johny

0

Można by też spróbować, zrobić coś na wzór semafora binarnego, wątek czeka aż zajdzie zmiana danej zmiennej, dwie metody get i set z sychronizowane oraz wait() i notify(), motoda set ustawiałaby by zmienną i odpalała dalsze wykonywanie wątka, a jezeli zmiany nie zachodzą wątek czeka po przez wait().

0

Jesli to twoja wlasna zmienna to w ogole nie ma sensu stosowac watku, tylko metody get, set. A jak jakas 'systemowa' to pomysl ol3j'a tez odpada, bo to nie ty ja ustawiasz...

pozdrawiam
johny

0

LOL! start() powinno byc wywolywane w konstruktorze Test a nie T

pzodrawiam

0
eximius napisał(a)

LOL! start() powinno byc wywolywane w konstruktorze Test a nie T

Niby czemu?

pozdrawiam
johny

0

zauwaz, ze metode obsluguje watek w ktorym jest ona wywolywana.
nawet jesli jest to mozliwe, to na pewno sie tego nie stosuje.
jeszcze nie spotkalem sie z kodem w ktorym watek sam sie uruchamia.

pozdrawiam

0
eximius napisał(a)

zauwaz, ze metode obsluguje watek w ktorym jest ona wywolywana.

No i?

eximius napisał(a)

nawet jesli jest to mozliwe, to na pewno sie tego nie stosuje.

Bo?

eximius napisał(a)

jeszcze nie spotkalem sie z kodem w ktorym watek sam sie uruchamia.

Co nie znaczy, ze nie mozna...

podrawiam
johny

0

chce zeby caly czas kontrolowal wartosc pewnej zmiennej
To zaimplementuj synchronizacje, wystarczy zwykłe zdażenie (SetEvent) wywołane podczas zmiany zmiennej.

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