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筆記
- scala學習筆記:理解並行集合par筆記並行
- Java NIO 緩衝區學習筆記Java筆記
- 【學習筆記】網路流筆記
- 網路流學習筆記筆記
- Java 多執行緒學習筆記Java執行緒筆記
- java學習筆記--多執行緒Java筆記執行緒
- Java學習筆記之執行緒Java筆記執行緒
- OpenResty學習筆記03:再探WAFREST筆記
- Java執行緒的深入探討Java執行緒
- java學習日記-字元流Java字元
- State模式探討(筆記心得體會)模式筆記
- Proxy模式探討(筆記心得體會)模式筆記
- Iterators模式探討(筆記心得體會)模式筆記
- JAVA學習筆記Java筆記
- Activiti 學習筆記九:並行閘道器(parallelGateWay)筆記並行ParallelGateway
- 《JAVA學習指南》學習筆記Java筆記
- Java多執行緒學習筆記(自用)Java執行緒筆記
- java學習筆記.04——執行緒池Java筆記執行緒
- Java執行緒的深入探討 (轉)Java執行緒
- Java執行時繫結探討薦Java
- Java 集合學習筆記Java筆記
- java學習筆記6Java筆記
- Java學習筆記--反射Java筆記反射
- java學習筆記啊Java筆記
- Java學習筆記二Java筆記
- Java學習筆記三Java筆記
- Java JNI 學習筆記Java筆記
- Java學習筆記4Java筆記
- 【區塊鏈學習】《區塊鏈學習指南》學習筆記區塊鏈筆記
- Java 8 Stream並行流Java並行
- Java多執行緒學習筆記(二) (轉)Java執行緒筆記
- Java學習筆記--sql與javaJava筆記SQL
- Java筆記-IO流Java筆記
- Java學習筆記記錄(二)Java筆記
- 2.RabbitMQ的5種模式,並使用java進行模擬操作-學習筆記MQ模式Java筆記
- 【學習筆記】並查集應用筆記並查集
- Activiti工作流基礎學習筆記筆記