SCJP - Test z wątków
Przyszło mi właśnie do głowy takie pytanko testowe pod kątem SCJP - jaki będzie efekt uruchomienia poniższego kodu (odpowiedź do "wytestowania"):
public class ThreadTest {
public static void main(String[] args) {
Thread thread = new Thread(new MyRunnable(), "my thread");
thread.run();
}
}
class MyRunnable implements Runnable {
public void run() {
System.out.print(Thread.currentThread().getName());
}
}
- wyświetlenie napisu 'my thread'
- wyświetlenie napisu 'main'
- brak efektu - żaden napis nie zostanie wyświetlony
- program się nie skompiluje
- program się skompiluje ale uruchomienie zakończy się wyjątkiem
5 komentarzy:
Wyświetli 'main', tylko dlaczego?
Jak dlaczego. Przecież podaje nazwe watka w którym działa.
Jeżeli chcesz threada "my thread" to wypadałoby go uruchomić thread.start();
Dokładnie tak. Metoda run() to zwykła metoda - nie powoduje ona utworzenia nowego wątku, ale oczywiście możemy ją sobie wywołać, więc nie ma błedu. Implementacja metody run() w klasie Thread jest taka, że jeśli instancję klasy Thread utworzono na bazie instancji Runnable to wywołuje ona metodę run() z tejże instancji Runnable. Implementacja metody run() w klasie implementującej Runnable w naszym przykładzie jest taka, że wyświetlana jest nazwa bieżącego wątku. Bieżącym jest wątek główny a ten domyślnie ma nazwę 'main'.
Jestem przekonany, że już gdzieś widziałem takie pytanie... A ponieważ nie robiłem dużo mocków, prawie na pewno było to na... egzaminie SCJP 6 :-). Gratuluję intuicji :-).
Dzięki za wyjaśnienie, dopiero zaczynam z Javą.
Prześlij komentarz