1. 程式人生 > >多線程(死鎖)學習筆記

多線程(死鎖)學習筆記

說過 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();
                }
    

    多線程(死鎖)學習筆記