Java並行流誤區(學習筆記探討)
在OnJava8第24章並行流討論了一段問題,相關程式碼如下:
public class ParallelStreamCurrent {
static final Deque<String> TRACE= new ConcurrentLinkedDeque<>();
static class IntGenerator implements Supplier<Integer>{
private AtomicInteger current = new AtomicInteger();
@Override
public Integer get() {
TRACE.add(current.get()+":"+ Thread.currentThread().getName());
return current.getAndIncrement();
}
}
public static void main(String[] args) {
List<Integer> x = Stream.generate(new IntGenerator()).
limit(10).
parallel().
collect(Collectors.toList());
System.out.println(x);
System.out.println(TRACE.toString());
}
}
其中,parallel()是允許多執行緒呼叫的,也就導致了併發問題,但是current是執行緒安全的AtomicInteger ,按說列印出來的是[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],但是我在ide上怎麼嘗試列印出來都如同這樣的亂數:
讓我很是費解,難道AtomicInteger不是執行緒安全的?答案肯定不是,那會是什麼問題呢?大佬的文章這麼說明顯也是實驗下的結果難道有什麼誤解?望有知道的大佬給予解答,感謝!
相關文章
- Java學習筆記09(IO流)Java筆記
- Java 多執行緒學習筆記Java執行緒筆記
- 網路流學習筆記筆記
- 【學習筆記】網路流筆記
- OpenResty學習筆記03:再探WAFREST筆記
- JAVA學習筆記Java筆記
- java學習日記-字元流Java字元
- Java多執行緒學習筆記(自用)Java執行緒筆記
- 《JAVA學習指南》學習筆記Java筆記
- java學習筆記6Java筆記
- Java學習筆記4Java筆記
- Java JNI 學習筆記Java筆記
- Java 集合學習筆記Java筆記
- Java 8 Stream並行流Java並行
- Thinking in Java--Java多執行緒學習筆記(1)ThinkingJava執行緒筆記
- 【區塊鏈學習】《區塊鏈學習指南》學習筆記區塊鏈筆記
- 2.RabbitMQ的5種模式,並使用java進行模擬操作-學習筆記MQ模式Java筆記
- Java筆記-IO流Java筆記
- Java學習筆記記錄(二)Java筆記
- 【學習筆記】並查集應用筆記並查集
- 探討Java中的多執行緒概念 - foojayJava執行緒
- Thinking in Java---多執行緒學習筆記(2)ThinkingJava執行緒筆記
- Java JDK 9學習筆記JavaJDK筆記
- TensorFlow Java API 學習筆記JavaAPI筆記
- Java學習筆記系列-反射Java筆記反射
- 【部分】Java速成學習筆記Java筆記
- Java基礎學習筆記Java筆記
- Java學習筆記--運算子Java筆記
- Kotlin for Java Developers 學習筆記KotlinJavaDeveloper筆記
- 【Java學習筆記】Collections集合Java筆記
- java學習筆記(異常)Java筆記
- Node.js stream(流) 學習筆記(一)Node.js筆記
- CAN匯流排協議 學習筆記協議筆記
- Activiti工作流基礎學習筆記筆記
- 說區塊鏈-學習筆記區塊鏈筆記
- JVM學習筆記之棧區JVM筆記
- [演算法學習筆記] 並查集演算法筆記並查集
- Golang 學習筆記八 錯誤異常Golang筆記