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】【多執行緒】獲取和設定執行緒名字、獲取執行緒物件(3)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】【多執行緒】執行緒的生命週期Java執行緒
- Java多執行緒之執行緒中止Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- java 多執行緒守護執行緒Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- java多執行緒9:執行緒池Java執行緒
- 【java多執行緒】(二)執行緒停止Java執行緒
- Java多執行緒學習(一)Java多執行緒入門Java執行緒
- 【Java】【多執行緒】兩個執行緒間的通訊、wait、notify、notifyAllJava執行緒AI
- Java多執行緒(一)多執行緒入門篇Java執行緒
- java多執行緒中的synchronized的byte[0]Java執行緒synchronized
- openharmony 多執行緒的方式有哪些?兩個worker執行緒資料如何通訊、記憶體如何共享、與Java多執行緒有什麼區別?執行緒記憶體Java
- Java多執行緒開發|volatile與偽共享問題Java執行緒
- java多執行緒5:執行緒間的通訊Java執行緒
- 【Java】【多執行緒】執行緒池簡述Java執行緒
- 執行緒池中多餘的執行緒是如何回收的?執行緒
- 探討Java中的多執行緒概念 - foojayJava執行緒