java 里,每個線程都有自己獨享的空間,也就是棧內存。線程在調用方法的時候,會創建一個棧幀。也就是說調用一個方法的時候,也就是一個棧幀的入棧過程,該方法執行完畢,棧幀也就出棧了。 換句話講,成員方法對于每個線程事實上是私有的,而不是你表面看上去的那樣是 "共享" 的。 那么為什么成員變量會出問題呢? 如你所知道的,每個新建對象都存放在堆中,每個持有該對象引用的線程,都可以訪問到它(只要你有那個權限)。 這也就是說,成員變量對于每個線程,事實上是共享的。
面試官問的面試題: java 里,每個線程都有自己獨享的空間,也就是棧內存。線程在調用方法的時候,會創建一個棧幀。也就是說調用一個方法的時候,也就是一個棧幀的入棧過程,該方法執行完畢,棧幀也就出棧了。
換句話講,成員方法對于每個線程事實上是私有的,而不是你表面看上去的那樣是 "共享" 的。
那么為什么成員變量會出問題呢?
如你所知道的,每個新建對象都存放在堆中,每個持有該對象引用的線程,都可以訪問到它(只要你有那個權限)。
這也就是說,成員變量對于每個線程,事實上是共享的。