[java] 함수형 인터페이스를 사용하여 스레드와 동기화를 처리하는 방법은 어떻게 되나요?

함수형 인터페이스를 사용하여 스레드와 동기화를 처리하는 방법을 알아보겠습니다. 스레드와 동기화를 처리하기 위해 먼저 함수형 인터페이스를 정의해야 합니다.

@FunctionalInterface
interface SynchronizedTask {
    void execute();
}

이제 동기화를 처리할 스레드를 생성하고, 함수형 인터페이스로 구현된 작업을 수행하는 방법을 알아보겠습니다.

public class ThreadSyncExample {
    // 공유 자원
    private static int counter = 0;

    public static void main(String[] args) throws InterruptedException {
        // Runnable 객체를 생성하여 스레드를 생성하고 실행
        Thread threadA = new Thread(() -> {
            syncTask(() -> {
                for (int i = 0; i < 100000; i++) {
                    counter++;
                }
            });
        });

        Thread threadB = new Thread(() -> {
            syncTask(() -> {
                for (int i = 0; i < 100000; i++) {
                    counter++;
                }
            });
        });

        // 스레드 시작
        threadA.start();
        threadB.start();

        // 스레드 종료 대기
        threadA.join();
        threadB.join();

        // 결과 출력
        System.out.println("Counter: " + counter);
    }

    // 함수형 인터페이스를 인자로 받아 동기화된 메소드로 실행
    private static synchronized void syncTask(SynchronizedTask task) {
        task.execute();
    }
}

위의 코드에서는 기본적으로 공유 자원인 counter 변수를 두 개의 스레드에서 동시에 접근하고 있습니다. 이때, syncTask 메소드를 이용하여 동기화된 작업을 실행하도록 하였습니다. syncTask 메소드는 SynchronizedTask 인터페이스를 매개변수로 받아, synchronized 예약어를 통해 동기화된 메소드로 실행됩니다.

이러한 방식으로 함수형 인터페이스를 사용하여 스레드와 동기화를 처리할 수 있습니다.

자세한 내용은 Java 동기화에 관한 문서를 참고하세요. Java Synchronization