클래스에 Java 동기화 블록 사용

Zeeshan Afridi 2023년10월12일
  1. 클래스에 Java 동기화 블록 사용
  2. 결론
클래스에 Java 동기화 블록 사용

Java에서 동기화는 공유할 수 있는 리소스에 액세스하는 여러 스레드를 관리하는 것입니다. Java에서 동기화는 스레드가 서로 안정적으로 통신할 수 있도록 사용되며 단일 스레드가 공유 리소스에 액세스하는 데 가장 적합한 옵션으로 간주됩니다.

synchronized 키워드는 동기화된 블록을 표시하는 데 사용됩니다. 일부 개체에서는 Java 동기화 블록이 적용됩니다.

클래스에 Java 동기화 블록 사용

동일한 개체에 대한 동기화된 블록에 여러 스레드가 있는 경우 한 스레드만 블록에 들어가고 한 번에 하나의 스레드만 실행할 수 있습니다. 다른 모든 스레드는 차단된 상태로 유지됩니다.

클래스에 대한 Java 동기화 블록을 예제와 함께 설명하겠습니다.

예제 코드:

class Block {
  // synchronized block starts from here
  void printBlock(int b) {
    synchronized (this) {
      System.out.println("The block output is: ");
      for (int j = 1; j <= 4; j++) {
        System.out.println(b * j);

        // handles exception
        try {
          Thread.sleep(500);
        } catch (Exception e) {
          System.out.println(e);
        }
      }
    }
  } // ending
}

class S1 extends Thread {
  Block s;
  S1(Block s) {
    this.s = s;
  }

  public void run() {
    s.printBlock(10);
  }
}

class S2 extends Thread {
  Block s;
  S2(Block s) {
    this.s = s;
  }

  public void run() {
    s.printBlock(200);
  }
}

class SyncBlock {
  // main method
  public static void main(String args[]) {
    // object creation
    Block obj = new Block();
    S1 s1 = new S1(obj);
    S2 s2 = new S2(obj);

    // run the threads s1 and s2
    s1.run();
    s2.run();
  }
}

출력:

The block output is:
10
20
30
40
The block output is:
200
400
600
800

위의 예에는 S1S2라는 두 개의 스레드가 있습니다. 두 스레드 모두 synchronized 메서드를 호출하는 데 도움이 되는 printBlock 메서드가 있습니다.

S1 스레드 입력 값은 10이고 S2의 경우 200입니다. 그러면 S1S2 스레드 출력 사이에 블록 출력이 인쇄됩니다.

예제 코드:

import java.util.*;

class synchronize {
  String title = "";
  public int c = 0;
  public void result(String s, List<String> li) {
    // only one thread is allowed to change the title simultaneously.
    synchronized (this) {
      title = s;
      c++;
    }

    li.add(s);
  }
}

class SyncBlock {
  // main method
  public static void main(String[] args) {
    // for synchronize class, we have created an object
    synchronize ob = new synchronize();

    // we have created a list here
    List<String> li = new ArrayList<String>();

    // for calling the method, a string is passed to it
    ob.result("Sprint Planning", li);
    System.out.println(ob.title);
  }
}

출력:

Sprint Planning

위의 예에서는 클래스 동기화가 생성되었습니다. 이 클래스에서는 synchronized 방법을 사용했습니다.

메서드를 호출하기 위한 입력 값으로 문자열이 전달됩니다. 즉, 스프린트 계획.

위의 프로그램을 실행하면 출력으로 Sprint Planning이 표시됩니다.

결론

Java에서 동기화 블록을 논의하는 방법은 여러 가지가 있지만 이 기사에서는 동기화, 동기화 블록 및 작동 방식에 대해 설명했습니다.

동기화 블록을 사용하여 객체에 대해 한 번에 여러 스레드가 있는 경우 한 번에 하나의 스레드만 실행할 수 있습니다. 블록 내부의 스레드가 성공적으로 실행될 때까지 다른 스레드는 블록에 들어갈 수 없습니다.

따라서 Java의 동기화된 블록 클래스는 예를 들어 블록에 한 번에 하나의 스레드만 있어야 합니다.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn