itsource

Java에서 별도의 스레드를 사용하여 메서드를 호출하려면 어떻게 해야 합니까?

mycopycode 2022. 8. 27. 10:17
반응형

Java에서 별도의 스레드를 사용하여 메서드를 호출하려면 어떻게 해야 합니까?

내가 방법이 있다고 가정해 보자.doWork()(메인 스레드가 아닌) 다른 스레드에서는 어떻게 부르죠?

Thread t1 = new Thread(new Runnable() {
    @Override
    public void run() {
        // code goes here.
    }
});  
t1.start();

또는

new Thread(new Runnable() {
     @Override
     public void run() {
          // code goes here.
     }
}).start();

또는

new Thread(() -> {
    // code goes here.
}).start();

또는

Executors.newSingleThreadExecutor().execute(new Runnable() {
    @Override
    public void run() {
        myCustomMethod();
    }
});

또는

Executors.newCachedThreadPool().execute(new Runnable() {
    @Override
    public void run() {
        myCustomMethod();
    }
});

를 구현하는 클래스를 만듭니다.Runnable인터페이스입니다.실행할 코드를 에 입력합니다.run()method - 이 메서드는 다음 명령어를 준수하기 위해 작성해야 합니다.Runnable인터페이스입니다."메인" 스레드에서 새 스레드를 만듭니다.Threadclass, constructor의 instance를 전달Runnable를 호출합니다.start()그 위에 올려놔요.startJVM에 대해 새로운 스레드를 작성하기 위한 마법을 실행하도록 지시한 후run새로운 스레드에서 메서드를 사용합니다.

public class MyRunnable implements Runnable {

    private int var;

    public MyRunnable(int var) {
        this.var = var;
    }

    public void run() {
        // code in the other thread, can reference "var" variable
    }
}

public class MainThreadClass {
    public static void main(String args[]) {
        MyRunnable myRunnable = new MyRunnable(10);
        Thread t = new Thread(myRunnable)
        t.start();
    }    
}

시작하려면 Java의 동시성 튜토리얼을 보십시오.

메서드가 자주 호출될 경우 비용이 많이 드는 작업이므로 매번 새 스레드를 생성할 필요가 없습니다.스레드 풀을 사용하는 것이 가장 좋습니다.봐주세요Future,Callable,Executor의 클래스java.util.concurrent패키지.

Java 8에서는 이 작업을 코드 한 줄로 수행할 수 있습니다.

메서드에 매개 변수가 없는 경우 메서드 참조를 사용할 수 있습니다.

new Thread(MyClass::doWork).start();

그렇지 않으면 람다 식에서 메서드를 호출할 수 있습니다.

new Thread(() -> doWork(someParam)).start();

적어도 Java 8을 사용하고 있는 경우는, 다음의 방법을 사용할 수 있습니다.runAsync클래스 Complete 테이블에서미래

CompletableFuture.runAsync(() -> {...});

결과 사용을 반환해야 하는 경우supplyAsync대신

CompletableFuture.supplyAsync(() -> 1);

다른 빠른 호출 옵션(DialogBoxes나 MessageBoxes 등)은 Lamba Expression을 사용하는 것입니다.

  new Thread(() -> {
                      "code here"
            }).start();

RxJava 2.x에서 이를 실현하려면 다음 명령을 사용합니다.

Completable.fromAction(this::dowork).subscribeOn(Schedulers.io().subscribe();

subscribeOn()method는 액션을 실행할 스케줄러를 지정합니다.RxJava에는 다음과 같은 몇 가지 사전 정의된 스케줄러가 있습니다.Schedulers.io()I/O 작업을 위한 스레드 풀이 있습니다.Schedulers.computation()CPU 부하가 높은 조작을 목적으로 하고 있습니다.

얼마 전 JDK5 executor 서비스를 사용하여 백그라운드에서 특정 프로세스를 실행하는 간단한 유틸리티 클래스를 작성한 적이 있습니다.일반적으로 doWork()는 void 반환값을 가지므로 이 유틸리티 클래스를 사용하여 백그라운드에서 실행할 수 있습니다.

이 유틸리티에 대해서는, 이 문서를 참조해 주세요.

언급URL : https://stackoverflow.com/questions/3489543/how-to-call-a-method-with-a-separate-thread-in-java

반응형