Về mặt khái niệm có nghĩa là gì khi người ta nói rằng mỗi luồng có ngăn xếp riêng của nó?


10

Tôi đã đọc Đồng thời Java trong Thực hành của Brian Goetz và bên trong phần Stack Confinement , có đề cập rằng mỗi luồng có ngăn xếp riêng của nó và do đó, các biến cục bộ được giới hạn trong luồng thực thi; chúng tồn tại trên ngăn xếp luồng thực thi, mà các luồng khác không thể truy cập được. Ông ta có ý gì khi mỗi luồng có ngăn xếp thực thi riêng?


4
Để hiểu sâu hơn về điều này, hãy tra cứu thanh ghi con trỏ ngăn xếp và cách nó được sử dụng trong lắp ráp. Điều này sẽ giải thích làm thế nào chủ đề có thể dễ dàng có ngăn xếp riêng của họ.
Peter Smith

1
Đồng ý với Peter Smith. Nó có thể mất thời gian, nhưng sau đó bạn có được kiến ​​thức hoàn hảo về những gì, làm thế nào và tại sao đang diễn ra
superM

Câu trả lời:


12

Bạn biết khi bạn đột nhập vào trình gỡ lỗi vì bất kỳ lý do gì và IDE cung cấp cho bạn dấu vết ngăn xếp? Và mỗi phương thức (khung stack) có tập hợp các biến cục bộ riêng mà bạn có thể kiểm tra trong trình gỡ lỗi?

Đó là "ngăn xếp thực thi" của chương trình của bạn. Nó cho thấy trạng thái cục bộ của chương trình của bạn hiện tại trông như thế nào. Điều mà tác giả đang nói là mỗi luồng có ngăn xếp thực thi riêng biệt như thế. Nó có ngăn xếp cuộc gọi riêng và mỗi phương thức có các biến cục bộ riêng.

Vì các biến được lưu trữ như một phần của ngăn xếp thực thi chứ không phải trong heap, nên chúng là duy nhất cho luồng đang chạy và không thể chia sẻ trực tiếp. Tuy nhiên, bạn có thể sao chép chúng hoặc chuyển các tham chiếu đến các đối tượng cho các luồng khác theo nhiều cách khác nhau, vì vậy đó chủ yếu là một sự khác biệt về mặt học thuật.


Vui lòng thêm một điểm nhấn mạnh hơn nữa vào đoạn thứ ba của bạn để nói rằng các biến cục bộ được tiếp xúc với các luồng khác hoặc các đối tượng tồn tại lâu sẽ không còn bị giới hạn. Do đó, yêu cầu được trích dẫn từ cuốn sách của OP là rất đáng ngờ.
rwong

4
@rwong: Không thể để lộ một biến cục bộ cho một luồng khác theo cách có vấn đề. Các biến chỉ chứa nguyên thủy hoặc tham chiếu. Đối tượng sống trên đống.
Michael Borgwardt

@MichaelBorgwardt Cho phép có hai trường hợp riêng biệt nói rằng biến chứa một nguyên thủy là trường hợp A và nói biến đó chứa tham chiếu là trường hợp B. Vì các nguyên hàm được truyền theo giá trị, các biến cục bộ thực sự là luồng an toàn nhưng về tham chiếu. Họ có thể được thông qua xung quanh? Tại sao bạn nói nó là không thể?
Geek

2
@Geek: Bởi vì biến và đối tượng mà nó đề cập đến là hai thứ riêng biệt và khác nhau không nên nhầm lẫn khi nói ở mức độ chi tiết này. Một biến cục bộ không thể tiếp xúc với một luồng khác. Đối tượng chắc chắn có thể.
Michael Borgwardt

@MichaelBorgwardt Tôi thấy những gì bạn đang nói. Cảm ơn đã làm rõ.
Geek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.