2014-03-19 42 views
0

定義本地變量是在方法中聲明的變量。多個線程將它們保存在自己的堆棧中。我需要了解它如何在多線程環境中傳遞Method參數。 ?如何在多線程環境中傳遞參數方法

例如 - 假設User是一個實例變量並傳遞給它的本地同步方法。

公共靜態同步registerUser(用戶用戶,詮釋計數){}

公共同步registerUser(用戶用戶,詮釋計數){}

在上述例子中,我傳遞一個對象和原語。

  1. 傳遞參數如何在具有多個線程的靜態方法中管理? (Objects,primitives)

  2. 傳遞參數如何在多線程的非靜態方法中管理? (對象,原語)?

3.活動線程總是獲取它執行的方法鎖。由於用戶對象引用在同步上下文中工作,該引用是否可用於其他線程在解鎖方法中使用?

+0

爲什麼參數傳遞在多線程環境中的工作與在單線程環境中工作不同? –

+0

您需要了解的第一件事是,無論您是否明確啓動線程,Java應用程序都是多線程的。所以相同的規則適用於某種方式。 –

回答

0

靜態方法鎖定類,而成員方法鎖定對象。

Java使用了一個pass-by-value,它在基元的情況下是值,在對象的情況下是對對象的引用。

在你的方法:

  • 存在對user沒有鎖定,這可以通過另一個線程經由不同的參照它,而被調用的方法的同步修改。
  • 無法修改基元count的值,以便該方法在調用任何方法後可以看到修改。
+0

感謝您的反饋。在線程獲取「靜態」方法的情況下。行爲如何? 1.這會鎖定其他同步的靜態方法嗎?以及這是其他線程的類級別嗎? – Kasun

+0

是的,當靜態方法同步時,它不會阻止另一個線程調用實例方法。看看這個問題的例子 - http://stackoverflow.com/questions/15329731/java-synchronizing-static-methods –