Java中一個物件在多執行緒中是共享的
public class begin {
public static void main(String[] arg) {
Data data = new Data(0);
new Thread(() -> {
for (int i = 0; i < 10; i++) {
data.path = data.path + "+";
System.out.println("increment, value = " + String.valueOf(data.increment()) + ", " + data.path);
}
}).start();
new Thread(() -> {
for (int i = 0; i < 10; i++) {
data.path = data.path + "-";
System.out.println("decrement, value = " + String.valueOf(data.decrement()) + ", " + data.path);
}
}).start();
}
static class Data {
int value;
String path;
Data(int i) {
value = i;
path = "";
}
int increment() {
return ++value;
}
int decrement() {
return --value;
}
}
}
輸出列印:
increment, value = 1, +
increment, value = 2, ++
increment, value = 3, +++
decrement, value = 2, +++-
decrement, value = 2, +++-+-
increment, value = 3, +++-+
increment, value = 2, +++-+--+
increment, value = 3, +++-+--++
increment, value = 4, +++-+--+++
increment, value = 5, +++-+--++++
increment, value = 6, +++-+--+++++
increment, value = 7, +++-+--++++++
decrement, value = 1, +++-+--
decrement, value = 6, +++-+--++++++-
decrement, value = 5, +++-+--++++++--
decrement, value = 4, +++-+--++++++---
decrement, value = 3, +++-+--++++++----
decrement, value = 2, +++-+--++++++-----
decrement, value = 1, +++-+--++++++------
decrement, value = 0, +++-+--++++++-------
注意:輸出的日誌可以看出,執行加操作的執行緒後,會在某一時刻執行減操作,而且多執行緒中“列印”這個行為也是有可能滯後的,如第二次 value = 2之後,先執行加再減,但是輸出的是把執行減的操作列印出來後再列印加的操作結果,所以,對於多執行緒中的資料操作是會引發併發衝突的,
相關文章
- 物件中的靜態屬性是否在多執行緒中共享物件執行緒
- JAVA多執行緒共享資料Java執行緒
- Java中的多執行緒Java執行緒
- Java 多執行緒共享模型之管程(上)Java執行緒模型
- Java 共享資料讀寫(多執行緒)Java執行緒
- Java中多執行緒的案例Java執行緒
- Java 程式中的多執行緒Java執行緒
- Java多執行緒——執行緒Java執行緒
- 在共享記憶體中進行執行緒間的同步是確保多執行緒程式正確執行的關鍵,以下是幾種常見的方法記憶體執行緒
- 多執行緒之共享模型執行緒模型
- Java中的多執行緒詳解Java執行緒
- Java多執行緒——獲取多個執行緒任務執行完的時間Java執行緒
- 多執行緒中的使用共享變數的問題執行緒變數
- Java多執行緒-執行緒中止Java執行緒
- Java多執行緒——執行緒池Java執行緒
- 【多執行緒與高併發】Java守護執行緒是什麼?什麼是Java的守護執行緒?執行緒Java
- Java多執行緒-執行緒池的使用Java執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- 【java】【多執行緒】獲取和設定執行緒名字、獲取執行緒物件(3)Java執行緒物件
- 深入理解多執行緒(三)—— Java的物件頭執行緒Java物件
- 深入理解多執行緒(二)—— Java的物件模型執行緒Java物件模型
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- Java多執行緒/併發08、中斷執行緒 interrupt()Java執行緒
- 【Java多執行緒】輕鬆搞定Java多執行緒(二)Java執行緒
- Java程式中的多執行緒(1)(轉)Java執行緒
- Java程式中的多執行緒(2)(轉)Java執行緒
- Java執行緒面試題(01) Java中如何檢查一個執行緒是否擁特定物件的鎖Java執行緒面試題物件
- java——多執行緒Java執行緒
- java 多執行緒Java執行緒
- 【Java】多執行緒Java執行緒
- JAVA 多執行緒 ??Java執行緒
- java多執行緒Java執行緒
- Java - 多執行緒Java執行緒
- 程式設計思想之多執行緒與多程式(3):Java 中的多執行緒程式設計執行緒Java
- java 多執行緒守護執行緒Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒