Tôi chỉ hỏi trong phối cảnh luồng ... có thể đã trả lời nhiều lần nhưng hãy giúp tôi hiểu điều này.Biến tĩnh so với Biến động
Với tài liệu tham khảo để đăng bài viết Volatile Vs Static in java
hỏi một giá trị biến tĩnh cũng sẽ là một giá trị cho tất cả các chủ đề, thì tại sao chúng ta nên đi cho dễ bay hơi? Tôi tìm thấy ví dụ sau đây:
public class VolatileExample {
public static void main(String args[]) {
new ExampleThread("Thread 1 ").start();
new ExampleThread("Thread 2 ").start();
}
}
class ExampleThread extends Thread {
private static volatile int testValue = 1;
public ExampleThread(String str){
super(str);
}
public void run() {
for (int i = 0; i < 3; i++) {
try {
System.out.println(getName() + " : "+i);
if (getName().compareTo("Thread 1 ") == 0)
{
testValue++;
System.out.println("Test Value T1: " + testValue);
}
if (getName().compareTo("Thread 2 ") == 0)
{
System.out.println("Test Value T2: " + testValue);
}
Thread.sleep(1000);
} catch (InterruptedException exception) {
exception.printStackTrace();
}
}
}
}
Output:
Thread 1 : 0
Test Value T1: 2
Thread 2 : 0
Test Value T2: 2
Thread 1 : 1
Test Value T1: 3
Thread 2 : 1
Test Value T2: 3
Thread 1 : 2
Test Value T1: 4
Thread 2 : 2
Test Value T2: 4
Nếu tôi loại bỏ các tĩnh từ testValue, kết quả thu được:
Thread 1 : 0
Test Value T1: 2
Thread 2 : 0
Test Value T2: 1
Thread 1 : 1
Test Value T1: 3
Thread 2 : 1
Test Value T2: 1
Thread 1 : 2
Test Value T1: 4
Thread 2 : 2
Test Value T2: 1
Tại sao chủ đề 2 không đọc giá trị được cập nhật? Nếu nó phải được thực hiện tĩnh, whats việc sử dụng dễ bay hơi?
Ai đó có thể cung cấp liên kết đến một ví dụ dễ bay hơi mà biến đó không khai báo tĩnh.
Cảm ơn
Các chấp nhận câu trả lời trên bài đăng bạn đã liên kết để trả lời câu hỏi của bạn. –
Đọc phần còn lại của câu trả lời - đặc biệt. bit về ** tĩnh dễ bay hơi ** .. – Nim
'static' =/=' final'. –