什麼是線程安全問題?
答:當多個線程訪問同一個全局變量,做寫的時候可能會受到其他線程的干擾。這種現象叫做線程安全問題,讀取的時候不會產生此類現象。
如何保證數據安全?
答:1.使用synchroized同步數據 //自動鎖
2.使用lock同步數據,在jdk-1.5併發包中//手動鎖,需要手動解鎖
問:爲什麼使用線程同步或使用鎖能解決線程安全問題呢?
答:將可能會發生數據衝突問題(線程不安全問題),只能讓當前一個線程進行執行。代碼執行完成後釋放鎖,然後才能讓其他線程進行執行。這樣的話就可以解決線程不安全問題。
問:什麼是多線程之間同步?
答:當多個線程共享同一個資源,不會受到其他線程的干擾。
持有鎖的線程可以在同步中執行
沒持有鎖的線程即使獲取CPU的執行權,也進不去
同步的前提:
1,必須要有兩個或者兩個以上的線程
2,必須是多個線程使用同一個鎖
必須保證同步中只能有一個線程在運行
好處:解決了多線程的安全問題
弊端:多個線程需要判斷鎖,較爲消耗資源、搶鎖的資源。
同步函數有哪些種?
非靜態同步函數(使用this),靜態同步函數(不是使用this,使用的是字節碼文件)
線程出現死鎖的原因:線程之間一直沒有釋放鎖導致所佔用,同步中嵌套同步會導致死鎖
java內存模型:主內存(jvm),本地私有內存(線程內存)