線程同步:是多個線程同時訪問同一資源,等待資源訪問結束,浪費時間,效率低
線程異步:訪問資源時在空閑等待時同時訪問其他資源,實現多線程機制
同步的前提
異步處理就是,你現在問我問題,我可以不回答你,等我用時間了再處理你這個問題.同步不就反之了,同步信息被立即處理 -- 直到信息處理完成才返回消息句柄;異步信息收到后將在后台處理一段時間 -- 而早在信息處理結束前就返回消息句柄
區別同步和異步
一個進程啟動的多個不相干線程,它們相互之間關系為異步。
同步必須執行到底之后才能執行其他操作,而異步可以任意操作
同步的好處與弊端
好處:解決了線程的安全問題。
弊端:每次都有判斷鎖,降低了效率。
但是在安全與效率之間,首先考慮的是安全。
一、多個線程執行的時候需要同步,如果是單線程則不需要同步。
二、多個線程在執行的過程中是不是使用同一把鎖。如果是,就是同步。否則不是同步。
synchronzied(obj){ }同一個所
synchronzied(new Object){ } 不是同一個鎖
對run()中需要同步的代碼進行同步,如果有的代碼不需要同步,則不要放到同步代碼塊中去。
同步的表現形式有兩種:
1、同步代碼塊,被同步關鍵字封裝的代碼就是同步代碼塊;
2、同步函數,被同步關鍵字修飾的函數就是同步函數。
同步代碼塊的鎖是可以是任意對象,在執行之前就好創建好一個鎖對象。那么同步函數的鎖在哪里?
同步函數的鎖就是調用該同步函數的對象,也就是this。
如果同步函數被static修飾,那么該同步函數的鎖就是這個類在堆內存中形成的類文件對象。
這時候不一定有該類的對象,但一定有該類的字節碼文件對象。