Java併發編程的藝術-讀書筆記

1.上下文切換爲什麼影響性能?

因爲CPU切換前會保存上一個任務的狀態,以便下次切換回這個任務時,可以再加載這個任務的狀態

2.多線程一定會比單線程快嗎?

不一定,多線程在創建線程及CPU上下文切換時會有一定的開銷。

3.如何避免死鎖?

1)避免一個線程同時獲取多個鎖

      Thread t1 = new Thread(new Runnable() {
           @Override
           public void run() {
               synchronized (A) {
                       Thread.sleep(2000);
                   synchronized (B) {
                       System.out.println("1");
                   }
               }
           }
       });

2)嘗試使用定時鎖lock.tryLock(timeout)來替代使用內部鎖機制

4.硬件和軟件的資源限制

在併發編程時,程序的執行速度受限於計算機硬件資源或軟件資源。
例如服務器帶寬爲2Mb/s,某個資源的下載速度爲1Mb/s,啓動10個線程下載,下載速度不會變成10Mb/s。
對於有數據庫操作時,如果SQL語句執行非常快,而線程的數量比數據庫連接數要大很多,則某些線程會被阻塞,等待數據庫連接。

5.synchronized關鍵字的使用

Java中的每一個對象都可以作爲鎖。
1)對於普通同步方法,鎖是當前實例對象
2)對於靜態同步方法,鎖是當前類的Class對象
3)對於同步方法塊,鎖是Synchronized括號裏配置的對象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章