static是一個修飾符,用于修飾類的成員方法、類的成員變量,另外可以編寫static代碼塊來優化程序性能,一般稱作靜態方法因為非靜態成員方法或者變量都必須依賴具體的對象才能夠被調用。被static修飾的成員變量和成員方法獨立于該類的任何對象。也就是說,它不依賴類特定的實例,被類的所有實例共享。只要這個類被加載,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們。
java保證線程安全的方法有以下這些:
針對原子性:JDK提供了非常多的Atomic類,比如AtomicInteger、AtomicLong、AtomicBoolean等等。這些類都是通過CAS來保證原子性。
針對可見性:同樣可以使用synchronized關鍵字加鎖來解決。與此同時,Java提供了volatile關鍵字。它要優于synchronized的性能,同樣也可以保證修改后對其他線程可見。volatile一般用于對變量的寫操作,不依賴于當前值的場景中,比如狀態標記量等等。
針對有序性:也可以使用synchronized關鍵字定義同步代碼塊,或者同步方法來保證有序性。另外也可以通過Lock接口來保證有序性。
回答所涉及的環境:聯想天逸510S、Windows 10。
static是一個修飾符,用于修飾類的成員方法、類的成員變量,另外可以編寫static代碼塊來優化程序性能,一般稱作靜態方法因為非靜態成員方法或者變量都必須依賴具體的對象才能夠被調用。被static修飾的成員變量和成員方法獨立于該類的任何對象。也就是說,它不依賴類特定的實例,被類的所有實例共享。只要這個類被加載,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們。
java保證線程安全的方法有以下這些:
針對原子性:JDK提供了非常多的Atomic類,比如AtomicInteger、AtomicLong、AtomicBoolean等等。這些類都是通過CAS來保證原子性。
針對可見性:同樣可以使用synchronized關鍵字加鎖來解決。與此同時,Java提供了volatile關鍵字。它要優于synchronized的性能,同樣也可以保證修改后對其他線程可見。volatile一般用于對變量的寫操作,不依賴于當前值的場景中,比如狀態標記量等等。
針對有序性:也可以使用synchronized關鍵字定義同步代碼塊,或者同步方法來保證有序性。另外也可以通過Lock接口來保證有序性。
回答所涉及的環境:聯想天逸510S、Windows 10。