다중 스레드 환경에서 JNI 구현에 혼란이 있습니다. 다음과 같이 네이티브 인터페이스를 나타내는 java 클래스가 있습니다.네이티브 메소드를 public 네이티브로 정의하는 것이 맞습니까? synchronized int doSum (int a, int b)?
public class Test {
public native int doSum(int a, int b);
}
해당 원시 메서드는 c로 구현됩니다.
이제 내 질문에 여러 스레드가 있습니다. 5라고 말하면서 모두 위의 클래스 테스트 중 하나의 전역 인스턴스를 사용하고 있습니다. 그래서 C로 작성된 네이티브 메소드 코드가 쓰레드에 안전 할까? 또는 질문에 언급 된 것처럼 스레드를 안전하게 만들 필요가 있습니까?
그리고 각 스레드에 대해 Test 클래스의 개별 인스턴스를 만든 다음 기본 함수를 호출하면 어떻게됩니까? 윌 스레드 안전합니까?
감사합니다.
메소드의 구현을 알지 못해도 알 수 없습니다. 구현이 스레드로부터 안전하다면 동기화 할 필요가 없습니다. 스레드로부터 안전하지 않으면 동기화를 통해 스레드로부터 안전 할 수도 있고 그렇지 않을 수도 있습니다. 그것은 모두 메소드의 코드에 따라 다릅니다. –