백엔드 엔지니어로서 우리는 데이터를 비동기식으로 처리해야 하는 상황에 직면합니다. 오늘은 자바에서 어떻게 하는지 그리고 다양한 방법으로 하는지 알아봅시다.

Thread

Java 동시성의 매우 기본적이지만 강력한 구성 요소는 다음과 같습니다. Thread. Java의 스레드는 실제로 운영 체제의 스레드와 연결되어 있습니다. 생성하는 가장 기본적인 방법 Thread 그것을 확장하고 재정의함으로써 run :

스레드를 시작하면 run() 호출됩니다.
당신은 물을 수 있습니다; 예, Thread에는 재정의할 수 있는 수많은 다른 메서드가 있습니다.

  • 대부분의 경우 스레드의 다른 메서드를 재정의하고 싶지 않습니다.
  • 일단 연장하면 Thread 클래스에서 확장하는 클래스는 Java가 다중 상속을 지원하지 않기 때문에 더 확장할 수 있는 능력을 상실합니다.
  • 각 스레드는 확장할 때 고유한 객체를 가지며, 스레드가 너무 많으면 메모리 건강에 좋지 않습니다. Objects of the extended Thread 만들어진.

Java는 Runnable 인터페이스를 통해 이러한 문제를 해결합니다. 사실로, Thread Runnable을 사용하는 오버로드된 메서드가 있습니다.

Runnable

Runnable 하나의 메서드만 있는 인터페이스입니다. run(). 예, Runnable은 기능적 인터페이스이며 해당 인스턴스는 람다 함수로 생성할 수 있습니다. 그러나 이렇게 하는 것은 쉬운 방법입니다. 복잡한 것들을 위해 우리는 그것을 구현하고 싶을 것입니다. 여기에서 차이점을 확인하십시오. 요구 사항에 관한 모든 것입니다.

Runnable이 있지만 run(), 스레드가 아니라 스레드에 의해 제어(전달)될 때까지 Java 클래스일 뿐입니다. 스레드를 시작하면 실행 가능한 개체가 run() 호출됩니다.

예, Java는 버전 1.5에서 해결했으며 Callable입니다.

Callable<V>

Callable 는 일반 인터페이스입니다. 왜요? 이 명령을 일반 실행으로 반환 값으로 실행합니다. Callable은 너무 기능적인 인터페이스이며 call() 예외를 throw하고 이 명령 값을 실행하는 제네릭을 반환하는 인수가 없는 유일한 메서드입니다.

Callable을 구현하는 것은 Runnable과 매우 유사합니다.

여기를 참조하십시오. 호출은 데이터를 처리하고 실행 후 수집할 수 있는 값을 반환합니다. 그러나 그것을 호출하는 데 큰 차이가 있습니까? 우리는 사용 ExecutorService 호출하고 Future 결과를 유지합니다. 그 이유에 대해 이야기해 봅시다.

보시다시피 스레드 생성 및 실행에 대한 제어된 동작은 없습니다(Runnable 또는 Callable도 가능). 우리는 각각이 OS의 스레드와 연관되어 있으므로 한 번에 실행되는 스레드의 수를 제어하고자 할 수 있습니다. 실행하는 스레드 수는 사용 가능한 CPU 코어 수보다 작아야 합니다. 모두 함께 Java는 다음과 같이 문제를 해결합니다. ExecutorService 상호 작용.
위는 에 대한 정보 기사입니다. Java의 비동기 프로그래밍: 1부.
위에서 공유한 지침과 관련하여 질문이 있는 경우 의견 섹션을 통해 언제든지 문의하십시오.