Java & Spring/자바

동기화(Synchronized)

Zin0_0 2020. 10. 20. 20:24
반응형

동기화

  • 자바에서 동기화(synchronized) 구현하는 방식 두 가지

    • 동기화(synchronized)

      • 여러 개의 스레드가 하나의 자원을 사용할 때, 현재 데이터를 사용하고 있는 스레드를 제외한 나머지 스레드들을 데이터에 접근할 수 없도록 막는 개념
      • synchronized 키워드를 남발하면 프로그램 성능 저하
    • 구현 방법

      • synchronized method 방법

        • 메소드 앞에 synchronized 키워드를 붙여주면 간단하게 사용 가능
        •     public synchronized myMethod(type param) {
              // ...
          }
      • synchronized block 방법

        • 파라미터에 공유할 객체를 넣어서 사용

        •     synchronized (공유 객체) {
               // ...
          }
          public void exMethod() {
              // 메소드 안에서 활용 가능
              private Object sharedData = new Object();
              synchronized(sharedData) {
                  // ..
              }
          }

동기와 비동기 간단 비교

  • 동기(Sync)
    • 해야하는 일을 순차적으로 진행하는 것
    • 즉, 실행과 동시에 return 값을 받는 경우
  • 비동기(Async)
    • 어떤 작업이 먼저 완료될지 모르지만, 스레드를 통해 한번에 작업을 진행하는것
    • 즉, 값이 반환되기 전까지는 blocking 되어있다.
    • 비동기 코드는 이벤트 큐나 백그라운드 스레드에 task를 위임하고, 다음 코드를 실행하기 때문에 바로 리턴값이 오지 않음
    • 분할 가능한 코드를 병렬화해서 시간을 단축하는데 용이
반응형