Pierwszą czynnością przy tworzeniu wątków jest stworzenie obiektu klasy implementującej interfejs Runnable, interfejs ten ma tylko jedną metodę run(), w której zamieścimy kod naszego wątku.
1.
public
interface
Runnable {
2.
void
run();
3.
}
1.
class
Watek
implements
Runnable {
2.
void
run() {
3.
// kod, który ma zostać wywołany przez wątek
4.
}
5.
}
1.
Runnable obiekt =
new
Watek();
2.
Thread pierwszyWatek =
new
Thread(obiekt);
1.
pierwszyWatek.start();
01.
/**
02.
* Wykorzystanie wątków
03.
* @author kodatnik.blogspot.com
04.
*/
05.
06.
// klasa implementująca interfejs Runnable
07.
class
Napis
implements
Runnable {
08.
// pole napis przechowujące łańcuch tekstowy
09.
private
String napis;
10.
11.
// konstruktor klasy
12.
public
Napis(String napis) {
13.
this
.napis = napis;
14.
}
15.
16.
// zaimplementowana metoda run
17.
public
void
run() {
18.
// pętla dziesięciokrotna
19.
for
(
int
i =
0
; i <
10
; i++) {
20.
// wyświetlamy napis
21.
System.out.println(napis);
22.
try
{
23.
// usypiamy wątek na losową liczbę milisekund (od 0 do 2000)
24.
Thread.sleep((
int
)(Math.random()*
2000
));
25.
}
catch
(InterruptedException e){}
26.
}
27.
}
28.
}
29.
30.
// klasa tworząca i uruchamiająca wątki
31.
public
class
Watki {
32.
public
static
void
main(String [] args) {
33.
// rozpoczynamy działanie metody main()
34.
System.out.println(
"Tworzenie wątków w Javie."
);
35.
36.
// tworzymy trzy obiekty klasy napis z różnymi łańcuchami tekstowymi
37.
Napis napisPierwszy =
new
Napis(
"Kodatnik"
);
38.
Napis napisDrugi =
new
Napis(
"Java"
);
39.
Napis napisTrzeci =
new
Napis(
"Wątek"
);
40.
41.
// tworzymy trzy wątki
42.
Thread watekPierwszy =
new
Thread(napisPierwszy);
43.
Thread watekDrugi =
new
Thread(napisDrugi);
44.
Thread watekTrzeci =
new
Thread(napisTrzeci);
45.
46.
// uruchamiamy wątki
47.
watekPierwszy.start();
48.
watekDrugi.start();
49.
watekTrzeci.start();
50.
51.
// kończymy działanie metody main() wyświetlając komunikat
52.
System.out.println(
"Metoda main(), główny wątek aplikacji, zakończyła swoje działanie."
);
53.
}
54.
}
Tworzenie wątków w Javie. Metoda main(), główny wątek aplikacji, zakończyła swoje działanie. Kodatnik Java Wątek Kodatnik Wątek Java Wątek Kodatnik Java Kodatnik Java Wątek Kodatnik Java Wątek Java Kodatnik Wątek Java Wątek Kodatnik Wątek Java Wątek Java Kodatnik Kodatnik Java Wątek Kodatnik Java Wątek Wątek Java Kodatnik Wątek Kodatnik Java Kodatnik Wątek Java Kodatnik Kodatnik Wątek Wątek Java Kodatnik Kodatnik Kodatnik Java Wątek Kodatnik Wątek Java Kodatnik Wątek Java Wątek Java JavaMożemy dodać nowe wątki z innymi napisami i sprawdzić działanie programu. Inny przykład wykorzystania wątków zaprezentowałem w poście Zegar w Swingu. W kolejnym postach zastanowimy się jak zatrzymywać wątki i jak je synchronizować.
Innym sposobem tworzenia wątków jest rozszerzenie możliwości klasy Thread. Przesłaniamy metodę run() i wątek gotowy. Ten sposób ma jednak kilka wad, jeśli nasza klasa będzie dziedziczyć z innej klasy to nie może już rozszerzać możliwości klasy Thread (dziedziczenie w Javie jest jednokrotne). Rozwiązanie z interfejsem nie narzuca nam takich ograniczeń.
Pisząc dowolny program w Javie korzystamy, nawet nie wiedząc o tym, z wątków. Każda aplikacja jest uruchamiana w Wirtualnej Maszynie Javy jako osobny wątek. Możliwe zatem jest jest wstrzymanie za pomocą metody Thread.sleep().
9 Komentarzy - Wątki w Javie - podstawy
Spoko wstęp. Napisz coś o zarządzaniu pulą wątków. Sposoby synchronizacji. Może o frameworku fork/join/
Ciekawy tekst, obecnie wielowątkowość staje się coraz popularniejszym sposobem na przyśpieszenie obliczeń
Bardzo ładnie opisany i skomentowany program. No i jeszcze z zachowaniem zasad hermetyzacji. Dobrze wykonana robota. Aż miło.
Wielkie dzięki za artykuły o Javie, dużo mi pomogły. Szkoda, że brak kolejnych, pozdrawiam!
Dobra blog! Wiele ciekawych rzeczy i na pewno mi się przyda :)
przerwales pisanie tego bloga? why? :)
Java dzika Java
lubię jave - fajny blog ! stare klimaty !
Bardzo dobrze opisane i wyjaśnione zagadnienie wątków. Wiele osób nie jest w stanie tego ogarnąć w Javie. Nie jest to takie trudne, ale właśnie trzeba wpaść na taki tekst żeby to dobrze zrozumieć. Super robota!
Prześlij komentarz
Możesz użyć niektórych tagów HTML, takich jak <b>, <i>, <u>, <a> Nie spamuj :)