ArrayList 的執行緒安全問題
錯誤資訊:
java.util.ConcurrentModificationException: null at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909) ~[?:1.8.0_181] at java.util.ArrayList$Itr.next(ArrayList.java:859) ~[?:1.8.0_181] at com.vsoc.realtime.schedule.functions.PostgreSQLSinkFunction.flush(PostgreSQLSinkFunction.java:199) ~[blob_p-87058e81471573bdb6638bc203aad50c09ce387c-f9f70b611eeba0339b2421e8d3b249d4:?] at com.vsoc.realtime.schedule.functions.PostgreSQLSinkFunction.lambda$open$0(PostgreSQLSinkFunction.java:88) ~[blob_p-87058e81471573bdb6638bc203aad50c09ce387c-f9f70b611eeba0339b2421e8d3b249d4:?] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_181] at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [?:1.8.0_181] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_181] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [?:1.8.0_181] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_181] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_181] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
錯誤原因:
在SinkFunction函式裡面,使用List不當的話,可能會導致執行緒安全問題,比如,配置了一個定時任務,定時遍歷獲取資料,但是另外一個地方在往這個List裡面寫資料,這種情況,就可能會導致執行緒安全問題。
解決方案 :
//Collections.synchronizedList buffer = Collections.synchronizedList(new ArrayList<>()); private void flush() { // synchronized synchronized (buffer) { // ...... } }
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70024433/viewspace-3002760/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 03 執行緒安全問題執行緒
- SimpleDateFormat 執行緒安全問題ORM執行緒
- parallelStream中的執行緒安全問題Parallel執行緒
- 深入JAVA執行緒安全問題Java執行緒
- 多執行緒,你覺得你安全了?(執行緒安全問題)執行緒
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- 模板方法中的執行緒安全問題執行緒
- lambda中stream執行緒安全的問題執行緒
- Java 執行緒安全問題的本質Java執行緒
- SpringMVC中出現的執行緒安全問題分析SpringMVC執行緒
- 多執行緒的安全性問題(三)執行緒
- JUC之集合中的執行緒安全問題執行緒
- 程式碼審查:從 ArrayList 說執行緒安全執行緒
- 從FMDB執行緒安全問題說起執行緒
- 單例模式執行緒安全reorder問題單例模式執行緒
- 多執行緒的安全問題及解決方案執行緒
- Java之執行緒安全問題的3種處理方式(通過執行緒同步)Java執行緒
- 多執行緒併發安全問題詳解執行緒
- 5分鐘搞懂多執行緒安全問題執行緒
- Python執行緒安全問題及解決方法Python執行緒
- 探究Spring中Bean的執行緒安全性問題SpringBean執行緒
- iOS多執行緒全套:執行緒生命週期,多執行緒的四種解決方案,執行緒安全問題,GCD的使用,NSOperation的使用iOS執行緒GC
- ArrayList執行緒不安全怎麼辦?(CopyOnWriteArrayList詳解)執行緒
- 深入解讀HashMap執行緒安全性問題HashMap執行緒
- J2SE - 關於SimpleDateFonnat的執行緒安全問題執行緒
- 執行緒安全引起的錄音雜音電流音問題執行緒
- 單例模式中可能存在的一些問題(執行緒安全問題)單例模式執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- Java中解決多執行緒資料安全問題Java執行緒
- JDk1.7 HashMap原始碼解析——執行緒安全問題JDKHashMap原始碼執行緒
- 執行緒中斷以及執行緒中斷引發的那些問題執行緒
- 子執行緒使用父執行緒RequestScope作用域Bean問題的探究執行緒Bean
- 執行緒安全執行緒
- 多執行緒相關問題執行緒
- 多執行緒問題解釋執行緒
- JUC之多執行緒鎖問題執行緒
- 啃碎併發(五):Java執行緒安全特性與問題Java執行緒
- 多執行緒系列之 執行緒安全執行緒