이것은 숙제입니다.메서드에서 차단 제거
나는 해결책을 원하지 않으며, 링크 또는 아이디어가 적다.
public class Example
{
public void method()
{
int x = doThat();
//Call other methods which do not depend on x
return;
}
}
doThat()
결과가 다시 때까지 내 프로그램의 차단 결과 시간이 소요 될 것으로 알려진 방법이다 :
간단한 예를 들어, 제가하고 싶은 것은 말하기. 그리고이 Object의 다른 메소드를 사용하고 싶지만, doThat()
이 끝날 때까지 프로그램은 frozen
입니다. 이 다른 메서드는 반드시이 예제에서 사용 된 method()
에서 호출해야하지만 반드시 개체 외부에서 호출해야합니다.
스레드를 사용하는 것에 대해 생각했지만 개체 수가 많으면 (1000+) 매우 효율적일 것입니다. (잘못된 경우 제발 수정하십시오). 내가 스레드를 사용하는 경우 개체 당 하나의 스레드를 사용해야 할 것 같아요?
doThat();
을 호출 할 때 호출하는 개체를 차단하지 못하게하는 스레드 외에 다른 방법이 있습니까? 스레딩 만이 유일한 방법이라면 링크를 제공 할 수 있습니까?
downvotes를 얻는 것과 같은 질문을 알고 있으면 나는 어떤 downvotes도 허용 할 것입니다. 그러나 다만 연결은 중대한보다는 더 중대한 일 것입니다.
미리 감사드립니다. 질문이 규칙과 인라인되기를 바랍니다.
(my) Common은 메소드를 스레드 가능하게 만들 수 없다고 말합니다. 따라서'Example' 클래스를 스레딩 가능하게 만들면'method()'가 차단되었을 때 그 클래스의 다른 메소드를 호출 할 수 있습니까? 'doThat()'? – Muggen
Example 클래스는 Thread가 될 클래스가 아닙니다. 예제는 n 개의 가능한 스레드 (Executors.newFixedThreadPool (n))로 스레드 풀을 생성해야합니다. 그런 다음 작업을 수행하기 위해 "호출 가능"확장 클래스를 생성해야합니다. 스레드는 스레드입니다. Callable.call()을 구현하면 작업 (doThat())이 수행되고 계산 결과가 반환됩니다. Callable을 ExecutorService.submit (호출 가능)을 통해 스레드 풀에 전달하고 Future.get()을 통해 결과를 검색합니다. 이 마지막 통화가 차단되고 있음을 메모하십시오. 반환하기 바로 전에해야합니다. – Kellindil