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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SimpleDateFormat 執行緒安全問題ORM執行緒
- java執行緒安全問題Java執行緒
- 03 執行緒安全問題執行緒
- parallelStream中的執行緒安全問題Parallel執行緒
- 所謂的執行緒安全問題執行緒
- 深入JAVA執行緒安全問題Java執行緒
- 多執行緒,你覺得你安全了?(執行緒安全問題)執行緒
- 多執行緒-執行緒安全問題的產生原因分析以及同步程式碼塊的方式解決執行緒安全問題執行緒
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- ArrayList 為什麼執行緒不安全執行緒
- lambda中stream執行緒安全的問題執行緒
- Java 執行緒安全問題的本質Java執行緒
- 模板方法中的執行緒安全問題執行緒
- 多執行緒非同步安全,安全鎖的問題執行緒非同步
- 程式碼審查:從 ArrayList 說執行緒安全執行緒
- JUC之集合中的執行緒安全問題執行緒
- 多執行緒的安全性問題(三)執行緒
- 從FMDB執行緒安全問題說起執行緒
- 單例模式執行緒安全reorder問題單例模式執行緒
- 多執行緒的安全問題及解決方案執行緒
- SpringMVC中出現的執行緒安全問題分析SpringMVC執行緒
- Jedis 與 MySQL的連線執行緒安全問題MySql執行緒
- 執行緒問題執行緒
- 5分鐘搞懂多執行緒安全問題執行緒
- 多執行緒併發安全問題詳解執行緒
- 請教:struts中action執行緒安全問題執行緒
- Java之執行緒安全問題的3種處理方式(通過執行緒同步)Java執行緒
- ArrayList執行緒不安全怎麼辦?(CopyOnWriteArrayList詳解)執行緒
- C#集合類(HashTable, Dictionary, ArrayList)與HashTable執行緒安全C#執行緒
- 多執行緒-生產者消費者問題程式碼2並解決執行緒安全問題執行緒
- java web執行緒安全的疑問JavaWeb執行緒
- java多執行緒執行問題Java執行緒
- 多執行緒問題執行緒
- iOS多執行緒全套:執行緒生命週期,多執行緒的四種解決方案,執行緒安全問題,GCD的使用,NSOperation的使用iOS執行緒GC
- 深入解讀HashMap執行緒安全性問題HashMap執行緒
- Python執行緒安全問題及解決方法Python執行緒
- .NET String.Format 方法 執行緒安全問題ORM執行緒
- java中ThreadLocal作用與執行緒安全問題Javathread執行緒