찾다

 >  Q&A  >  본문

java中System.arraycopy是线程安全的吗?

请问一下 在java中System.arraycopy是不是线程安全的

巴扎黑巴扎黑2802일 전839

모든 응답(3)나는 대답할 것이다

  • 高洛峰

    高洛峰2017-04-18 10:25:09

    System.arraycopynative 메서드입니다.

    으아악

    native 메소드와 스레드 안전성 사이에는 필연적인 연관성이 없으며, System.arraycopy의 문서에 스레드로부터 안전하다는 언급이 없는 것을 보니 线程不安全的임을 알 수 있습니다.

    그러나 System.arraycopy이 실제로 스레드에 안전하지 않은지 확인하기 위해 다음과 같은 간단한 예를 작성했습니다.

    으아악

    이 예의 구체적인 작업은 다음과 같습니다.

    1. arrayOriginal과 arraySrc는 초기화 시 동일하지만 arrayDist는 모두 0입니다.

    2. 스레드를 시작하여 copy() 메소드를 실행하여 arraySrc를 arrayDist로 복사합니다.

    3. 은 메인 스레드에서 modify() 작업을 실행하고 arraySrc의 내용을 수정합니다. copy() 작업이 modify() 작업보다 우선하도록 하기 위해 Condition을 사용하고 2밀리초 동안 지연합니다. 복사 작업(예: System.arraycopy)이 수정 작업보다 먼저 실행되는지 확인하세요.

    4. 세 번째 점에 따르면 System.arraycopy이 스레드로부터 안전하다면 먼저 복사 작업을 수행한 다음 수정 작업을 수행해도 복사 결과에 영향을 미치지 않으므로 arrayOriginal은 arrayDist와 같아야 합니다. System.arraycopy线程不安全的인 경우 arrayOriginal은 arrayDist와 동일하지 않습니다.


    위의 추론을 바탕으로 프로그램을 실행하고 다음 출력을 얻습니다.

    으아악

    보시다시피 처음 두 번은 제대로 작동했지만 세 번째는 작동하지 않았습니다.

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-18 10:25:09

    네이티브 방식으로 힙의 메모리를 직접 복사합니다

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-18 10:25:09

    물론 그렇지 않습니다.

    잠겨 있거나 상호 배타적

    회신하다
    0
  • 취소회신하다