무효 반환 유형으로 Callable을 사용하는 방법은 무엇입니까?
저는 여러 인터페이스와이 두 인터페이스를 구현하는 데 필요한 두 개의 구현 클래스가있는 프로젝트에서 작업 중입니다.
내 첫 번째 인터페이스가-
public Interface interfaceA {
public void abc() throws Exception;
}
그리고 그 구현은-
public class TestA implements interfaceA {
// abc method
}
나는 이것을 이렇게 부르고있다-
TestA testA = new TestA();
testA.abc();
이제 두 번째 인터페이스는-
public Interface interfaceB {
public void xyz() throws Exception;
}
그리고 그 구현은-
public class TestB implements interfaceB {
// xyz method
}
나는 이것을 이렇게 부르고있다-
TestB testB = new TestB();
testB.xyz();
문제 설명:-
이제 내 질문은-이 두 구현 클래스를 병렬로 실행할 수있는 방법이 있습니까? 나는 그것을 순차적으로 실행하고 싶지 않습니다.
의미, 병렬 로 실행 TestA
하고 TestB
구현 하고 싶 습니까? 이것이 가능합니까?
여기서 Callable을 사용하려고 생각했지만 여기에서 void 반환 유형으로 Callable을 사용하는 방법을 모르겠습니다.
TestB 클래스를 예로 들어 보겠습니다.
public interface interfaceB {
public void xyz() throws Exception;
}
public class TestB implements interfaceB, Callable<?>{
@Override
public void xyz() throws Exception
{
//do something
}
@Override
public void call() throws Exception
{
xyz();
}
}
위의 코드는 컴파일 오류를 제공합니다 ..
최신 정보:-
It looks like lot of people are suggesting to use Runnable instead of callable. But not sure how do I use Runnable here so that I can execute TestA and TestB
in parallel.
You can use java.lang.Thread for parallel execution. However, in most cases it's easier to use an java.util.concurrent.ExecutorService. The latter provides a method to submit a Callable and returns a Future to get the result later (or wait for completion).
If testA.abc() and testB.xyz() should be executed in parallel, you use the ExecutorService to execute the former in a separate thread whereas the latter is executed in the original thread. Then you wait for the completion of the former for synchronization.
ExecutorService executor = ... // e.g. Executors.newFixedThreadPool(4);
Future<Void> future = executor.submit(new Callable<Void>() {
public Void call() throws Exception {
testA.abc();
return null;
}
});
testB.xyz();
future.get(); // wait for completion of testA.abc()
Why would you need a void for running something in Parallel? For one, if you don't need the return value, you can simply return null
.
To make something parallel you need to use threading/scheduling. I would personally recommend avoiding Callables, and using Runnables instead (and hey, no return value).
A shorter version:
ExecutorService executor = ... // e.g. Executors.newFixedThreadPool(4);
Future<?> future = executor.submit(() -> testA.abc());
testB.xyz();
future.get(); // wait for completion of testA.abc()
To be noted that having to run something in parallel with nothing to be returned could be a sign of a bad pattern :)
Also, if you are in a Spring environment, you could use: https://spring.io/guides/gs/async-method/
ReferenceURL : https://stackoverflow.com/questions/22795563/how-to-use-callable-with-void-return-type
'IT박스' 카테고리의 다른 글
참조가 아닌 다차원 배열의 복사본 만들기-JavaScript (0) | 2021.01.08 |
---|---|
이동 중에 두 맵의 통합 얻기 (0) | 2021.01.08 |
가짜 수신 전화 Android (0) | 2021.01.07 |
find 메서드에서 Mongoose 결과를 반환하는 방법은 무엇입니까? (0) | 2021.01.07 |
스크래피 단위 테스트 (0) | 2021.01.07 |