[HADOOP] 메소드 cancel () 및 메소드 인터럽트 ()가 중복 작업을 수행하는지 여부
HADOOP메소드 cancel () 및 메소드 인터럽트 ()가 중복 작업을 수행하는지 여부
org.apache.nutch.parse.ParseUtil.runParser (Parser p, Content content)의 출처를 읽었습니다.
이 두 가지 메소드 호출은 동일한 작업을 수행합니다.
지시 1 :
t.interrupt();
지시 2 :
task.cancel(true);
org.apache.nutch.parse.ParseUtil.runParser (Parser p, Content content)의 소스는 다음과 같습니다.
ParseCallable pc = new ParseCallable(p, content);
FutureTask<ParseResult> task = new FutureTask<ParseResult>(pc);
ParseResult res = null;
Thread t = new Thread(task);
t.start();
try {
res = task.get(MAX_PARSE_TIME, TimeUnit.SECONDS);
} catch (TimeoutException e) {
LOG.warn("TIMEOUT parsing " + content.getUrl() + " with " + p);
} catch (Exception e) {
task.cancel(true);
res = null;
t.interrupt();
} finally {
t = null;
pc = null;
}
return res;
해결법
-
==============================
1.그것들은 다른 추상화 레벨 (스레드보다 높은 추상화 레벨 인 작업)에서 작동하기 때문에 일반적으로 같은 일을하지 않습니다. 그러나이 경우 통화가 중복 된 것 같습니다.
그것들은 다른 추상화 레벨 (스레드보다 높은 추상화 레벨 인 작업)에서 작동하기 때문에 일반적으로 같은 일을하지 않습니다. 그러나이 경우 통화가 중복 된 것 같습니다.
FutureTask.cancel ()은 태스크에 더 이상 실행할 필요가 없으며 태스크가 현재 실행중인 스레드 (있는 경우)를 중단하려고 시도합니다.
t.interrupt ()는 스레드 t를 중단하려고 시도합니다.
이 경우 중복되는 것 같습니다. 작업이 여전히 실행 중이면 cancel (true)이 스레드를 중단해야합니다.이 경우 중복 인터럽트 () 호출이 필요하지 않습니다 (스레드에서 실행중인 코드가 한 번의 중단을 무시하지만 두 번의 인터럽트가 중단되지 않는 한) ).
해당 시점에서 작업이 이미 완료된 경우 cancel () 및 interrupt ()는 효력이 없습니다.
-
==============================
2.여기에 결론을 내리고 싶습니다. FutureTask.cancel ()의 인수로 true를 전달하면 interupt ()와 동일한 효과를 얻을 수 있습니다. 왜? cancel () 메소드의 src를 들여다 보자. cancel () 메소드가 메소드를 호출한다는 것을 알았습니다.
여기에 결론을 내리고 싶습니다. FutureTask.cancel ()의 인수로 true를 전달하면 interupt ()와 동일한 효과를 얻을 수 있습니다. 왜? cancel () 메소드의 src를 들여다 보자. cancel () 메소드가 메소드를 호출한다는 것을 알았습니다.
innerCancel(mayInterruptIfRunning);
메소드 안에있을 때 : innerCancel (mayInterruptIfRunning) ;, 우리는 아래 지침을 가질 수 있습니다 :
if (mayInterruptIfRunning) { Thread r = runner; if (r != null) r.interrupt(); }
따라서 필자의 경우 cancel () 실제로 실제로 인터럽트 ()를 호출합니다.
from https://stackoverflow.com/questions/7412491/whether-method-cancel-and-method-interrupt-do-the-duplicate-job by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] MRJob이 내 키를 정렬하는 이유는 무엇입니까? (0) | 2019.09.07 |
---|---|
[HADOOP] 그룹화 쿼리에서 조인 작업 제거 (0) | 2019.09.07 |
[HADOOP] Apache Pig-가방을 읽을 수 없음 (0) | 2019.09.07 |
[HADOOP] Hbase를 사용하여 Hive 구성 (0) | 2019.09.07 |
[HADOOP] 텍스트 파일의 하둡 사용자 정의 분할 (0) | 2019.09.07 |