Czytałem Java Concurrency in Practice autorstwa Briana Goetza i wewnątrz sekcji Stack Coninement wspomniano, że każdy wątek otrzymuje swój własny stos, a więc zmienne lokalne są wewnętrznie ograniczone do wątku wykonującego; istnieją na stosie wątków wykonawczych, który nie jest dostępny dla innych wątków. Co on oznacza, że każdy wątek ma swój własny stos wykonywania?
java
multithreading
concurrency
stack
Maniak
źródło
źródło
Odpowiedzi:
Wiesz, kiedy z jakiegoś powodu włamujesz się do debuggera, a IDE daje ślad stosu? I każda metoda (ramka stosu) ma swój własny zestaw zmiennych lokalnych, które można sprawdzić w debuggerze?
To jest „stos wykonania” twojego programu. Pokazuje, jak obecnie wygląda lokalny stan twojego programu. Autor mówi, że każdy wątek otrzymuje swój własny odrębny stos wykonawczy w ten sposób. Ma własny stos wywołań, a każda z metod ma własne zmienne lokalne.
Ponieważ zmienne są przechowywane jako część stosu wykonawczego, a nie w stercie, są one unikalne dla uruchamianego wątku i nie można ich udostępniać bezpośrednio. Możesz je jednak kopiować lub przekazywać odniesienia do obiektów do innych wątków na różne sposoby, więc jest to w większości akademickie rozróżnienie.
źródło