java 方法 java兩個線程同時調(diào)用一個類里的同一個方法,這樣會出現(xiàn)什么情況?有沒有問題?
java兩個線程同時調(diào)用一個類里的同一個方法,這樣會出現(xiàn)什么情況?有沒有問題?這取決于方法的功能。如果該方法要修改相同的變量,則可能會導(dǎo)致線程不同步。也就是說,如果兩個線程都調(diào)用一個公共變量5-1,結(jié)
java兩個線程同時調(diào)用一個類里的同一個方法,這樣會出現(xiàn)什么情況?有沒有問題?
這取決于方法的功能。如果該方法要修改相同的變量,則可能會導(dǎo)致線程不同步。也就是說,如果兩個線程都調(diào)用一個公共變量5-1,結(jié)果可能是4,因為它們可能都得到5,然后它們都配對5-1,然后將值賦給原始變量。如果該方法只通過傳入的參數(shù)計算返回值,不涉及修改公共變量,則沒有效果
但是,當(dāng)兩個線程都被鎖定時,如果它們包含同一個對象,則不可能同時運行,同時運行只是一種錯覺。同時,只能處理一個線程
web服務(wù)器將維護(hù)一個線程池。當(dāng)新請求傳入時,它將從線程池中獲取一個線程進(jìn)行處理。處理之后,它將把它放入線程池中,等待下一個請求獲取它。
當(dāng)多個語句在同一線程上運行以共享數(shù)據(jù)時,一個線程只執(zhí)行部分語句,但尚未完成。另一個線程參與了這個過程,這導(dǎo)致了共享數(shù)據(jù)的錯誤。解決方案是只有一個線程可以完成對多個共享數(shù)據(jù)進(jìn)行操作的語句。在執(zhí)行過程中,其他線程不參與執(zhí)行。
Java為多線程安全問題提供同步代碼塊
同步對象可以是任意的
{需要同步的代碼(哪些代碼在操作共享數(shù)據(jù))}
對象就像鎖一樣。持有鎖的線程可以在同步中執(zhí)行不帶鎖的線程,即使它獲得了CPU的執(zhí)行權(quán)限,也無法進(jìn)入,因為它沒有訪問權(quán)限