Java 원시 메소드 및 스레드 고려사항
Java™에서 사용할 수 없는 기능에 액세스하기 위해 원시 메소드를 사용할 수 있습니다. 원시 메소드와 함께 Java를 더 제대로 사용하기 위해, 다음 개념을 알아야 합니다.
- Java 스레드(Java에 의해 작성되었거나 접속된 원시 스레드)에서는 모든 부동 소수점이 작동 불가능합니다. 부동 소수점 예외를 다시 작동 가능하도록 하는 원시 메소드를 스레드가 실행하면, Java는 이 예외를 두 번째에 끄지 않습니다. 사용자 애플리케이션이 Java 코드를 실행하도록 리턴하기 전에 이 예외를 작동 불가능하도록 설정하지 않으면, Java 코드는 부동 소수점 예외가 발생하는 경우 올바르게 작동하지 않을 수 있습니다. 원시 스레드가 JVM(Java Virtual Machine)에서 분리되는 경우, 해당되는 부동 소수점 예외 마스크는 접속될 때 적용 중이었던 값으로 복원됩니다.
- 원시 스레드가 JVM(Java Virtual Machine)에 접속할 때, JVM(Java Virtual Machine)은 필요한 경우 스레드 우선순위를 변경하여 Java가 정의하는 1 - 10 우선순위 스키마를 준수합니다. 스레드가 분리될 때 우선순위는 복원됩니다. 접속 후, 스레드는 원시 메소드 인터페이스(예: POSIX API)를 사용하여 스레드 우선순위를 변경할 수 있습니다. Java는 JVM(Java Virtual Machine)으로 다시 이전 시 스레드 우선순위를 변경하지 않습니다.
- JNI(Java Native Interface)의 호출 API 구성요소는
사용자가 애플리케이션 내에서 JVM(Java Virtual Machine)을
삽입할 수 있도록 합니다. 애플리케이션이 JVM(Java Virtual Machine)을
작성하고 JVM(Java Virtual Machine)이 비정상적으로 종료되면,
JVM(Java Virtual Machine)이 종료될 때 JVM(Java Virtual Machine)에 해당 스레드가
접속된 경우 프로세스의 초기 스레드에 MCH74A5 "JVM(Java Virtual Machine)이
종료됨" IBM® i 예외 신호가 전송됩니다.
JVM(Java Virtual Machine)은 다음 이유로
비정상적으로 종료될 수 있습니다.
- 사용자가 java.lang.System.exit() 메소드를 호출합니다.
- JVM(Java Virtual Machine)에서 필요로 하는 스레드가 종료됩니다.
- JVM(Java Virtual Machine)에서 내부 오류가 발생합니다.
원시 메소드는 항상 멀티스레드 프로세스에 실행되므로, 포함하는 코드는 스레드 안전 상태여야 합니다. 이 때 원시 메소드에 사용되는 언어 및 함수에 다음 제한사항이 부과됩니다.
- 원시 메소드에 ILE CL을 사용하면 안됩니다. 이 언어는 스레드 안전 상태가 아니기 때문입니다.
스레드 안전 CL 명령을 실행하려면 C 언어 system() 함수나 java.lang.Runtime.exec() 메소드를
사용할 수 있습니다.
- C 또는 C++ 원시 메소드에서 스레드 안전 CL 명령을 실행하기 위해 C 언어 system() 함수를 사용하십시오.
- Java에서 직접 스레드 안전 CL 명령을 실행하기 위해 java.lang.Runtime.exec() 메소드를 사용하십시오.
- AIX® C/C++,
ILE C, ILE C++, ILE COBOL 및 ILE RPG를 사용하여 원시 메소드를 쓸 수 있지만,
원시 메소드에서 호출되는 모든 함수는 스레드 안전 상태여야 합니다.
참고: 원시 메소드 쓰기에 대한 컴파일 시간 지원은 현재 C, C++ 및 RPG 언어에만 제공됩니다. 가능하지만, 다른 언어로 원시 메소드를 쓰는 것은 더 복잡할 수 있습니다.
주의: 모든 표준 C, C++, COBOL 또는 RPG 함수가 스레드 안전 상태는 아닙니다.
- C 및 C++ exit()와 abort() 함수는 원시 메소드 내에서 사용되지 않습니다.
이러한 함수는 JVM(Java Virtual Machine)을 실행하는 전체 프로세스가
중지되도록 합니다. 여기에는 Java에서 시작되었는지 여부에 관계없이
프로세스의 모든 스레드가 포함됩니다. 참고: 참조된 exit() 함수는 C 및 C++ 함수이며, java.lang.Runtime.exit() 메소드와 동일하지 않습니다.
서버의 스레드에 대한 자세한 정보는 멀티스레드 애플리케이션을 참조하십시오.