我對多線程環境下的JNI實現感到困惑。我有一個Java類如下,代表原生接口:將本地方法定義爲公共本機synchronized int doSum(int a,int b)是否正確?
public class Test {
public native int doSum(int a, int b);
}
而相應的本地方法在c中實現。
現在,我的問題是,我有多個線程,說5,並且他們都使用上面的類Test的一個全局實例。那麼,用C編寫的本地方法代碼是否可能是線程安全的呢?或者我是否需要像提到的問題那樣使線程安全?
如果我爲每個線程創建Test類的單個實例,然後調用本機函數呢?這會表現線程安全嗎?
謝謝。
如果不知道該方法的實施情況,我們無法判斷。如果實現是線程安全的,則不需要同步。如果它不是線程安全的,那麼同步可以使它線程安全或不安全。這完全取決於方法的代碼。 – 2013-03-01 07:45:49