執行緒同步:是多個執行緒同時訪問同一資源,等待資源訪問結束,浪費時間,效率低
執行緒非同步:訪問資源時在空閒等待時同時訪問其他資源,實現多執行緒機制
區別同步和非同步
一個程序啟動的多個不相干執行緒,它們相互之間關係為非同步。
同步必須執行到底之後才能執行其他操作,而非同步可以任意操作
同步的好處與弊端
好處:解決了執行緒的安全問題。
弊端:每次都有判斷鎖,降低了效率。
但是在安全與效率之間,首先考慮的是安全。
同步的前提
一、多個執行緒執行的時候需要同步,如果是單執行緒則不需要同步。
二、多個執行緒在執行的過程中是不是使用同一把鎖。如果是,就是同步。否則不是同步。
synchronzied(obj){ }同一個所
synchronzied(new Object){ } 不是同一個鎖
對run()中需要同步的程式碼進行同步,如果有的程式碼不需要同步,則不要放到同步程式碼塊中去。
同步的表現形式有兩種:
1、同步程式碼塊,被同步關鍵字封裝的程式碼就是同步程式碼塊;
2、同步函式,被同步關鍵字修飾的函式就是同步函式。
同步程式碼塊的鎖是可以是任意物件,在執行之前就好建立好一個鎖物件。那麼同步函式的鎖在哪裡?
同步函式的鎖就是呼叫該同步函式的物件,也就是this。
如果同步函式被static修飾,那麼該同步函式的鎖就是這個類在堆記憶體中形成的類檔案物件。
這時候不一定有該類的物件,但一定有該類的位元組碼檔案物件。
執行緒同步:是多個執行緒同時訪問同一資源,等待資源訪問結束,浪費時間,效率低
執行緒非同步:訪問資源時在空閒等待時同時訪問其他資源,實現多執行緒機制
區別同步和非同步
一個程序啟動的多個不相干執行緒,它們相互之間關係為非同步。
同步必須執行到底之後才能執行其他操作,而非同步可以任意操作
同步的好處與弊端
好處:解決了執行緒的安全問題。
弊端:每次都有判斷鎖,降低了效率。
但是在安全與效率之間,首先考慮的是安全。
同步的前提
一、多個執行緒執行的時候需要同步,如果是單執行緒則不需要同步。
二、多個執行緒在執行的過程中是不是使用同一把鎖。如果是,就是同步。否則不是同步。
synchronzied(obj){ }同一個所
synchronzied(new Object){ } 不是同一個鎖
對run()中需要同步的程式碼進行同步,如果有的程式碼不需要同步,則不要放到同步程式碼塊中去。
同步的表現形式有兩種:
1、同步程式碼塊,被同步關鍵字封裝的程式碼就是同步程式碼塊;
2、同步函式,被同步關鍵字修飾的函式就是同步函式。
同步程式碼塊的鎖是可以是任意物件,在執行之前就好建立好一個鎖物件。那麼同步函式的鎖在哪裡?
同步函式的鎖就是呼叫該同步函式的物件,也就是this。
如果同步函式被static修飾,那麼該同步函式的鎖就是這個類在堆記憶體中形成的類檔案物件。
這時候不一定有該類的物件,但一定有該類的位元組碼檔案物件。