版權聲明: 本文由 一隻博客 發表於 bloghome博客
文章連接: https://www.bloghome.com.cn/user/cnn237111java
即便Java方法說明文檔說是線程安全的,不表明就多線程下的線程操做確定安全,仍是會遇到同步問題的。
好比Vector,對比ArrayList是一個線程安全的類,可是不恰當的操做,仍是會有問題,下面的代碼中,Vector中放了10000個數字,有20個線程,循環刪除這個列表中的最後一個數字。
運行的時候,很大的機率會出現java.lang.ArrayIndexOutOfBoundsException的異常,由於檢測到size的時候和執行刪除的時候,size是不一樣的,程序可能會出現異常。安全
for (int i = 0; i < 10000; i++) { c.add(i); } for (int i = 0; i < 20; i++) { FutureTask<Integer> task = new FutureTask<Integer>(() -> { while (c.size() > 0) { try { c.remove(c.size() - 1); } catch (Exception e) { // // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("thread finished"); return 0; }); new Thread(task).start(); }