多線程(死鎖)學習筆記
阿新 • • 發佈:2018-08-08
說過 print sta xxx 使用 builder ati stringbu arr A:回顧以前說過的線程安全問題
- 看源碼:Vector,StringBuffer,Hashtable,Collections.synchroinzed(xxx)
- Vector是線程安全的,ArrayList是線程不安全的
- StringBuffer是線程安全的,StringBuilder是線程不安全的
- Hashtable是線程安全的,HashMap是線程不安全的
多線程同步的時候, 如果同步代碼嵌套, 使用相同鎖, 就有可能出現死鎖 * 盡量不要嵌套使用 private static String s1 = "筷子左"; private static String s2 = "筷子右"; public static void main(String[] args) { new Thread() { public void run() { while(true) { synchronized(s1) { System.out.println(getName() + "...拿到" + s1 + "等待" + s2); synchronized(s2) { System.out.println(getName() + "...拿到" + s2 + "開吃"); } } } } }.start(); new Thread() { public void run() { while(true) { synchronized(s2) { System.out.println(getName() + "...拿到" + s2 + "等待" + s1); synchronized(s1) { System.out.println(getName() + "...拿到" + s1 + "開吃"); } } } } }.start(); }
多線程(死鎖)學習筆記