두 개의 병렬 연산을 실행하고 두 번째 병렬 연산이 끝나면 첫 번째 병렬 연산을 중단해야합니다. Thread
의 명시 적으로 사용하지 않고,스칼라에서 비동기 계산을 방해하는 방법은 무엇입니까?
/**
* Runs <var>sup</var> in parallel with <var>main</var>.
* Terminate (interrupt) it when <var>main</var> finishes.
*/
def support[R](sup: => Unit, main: => R): R = {
val supThread = new Thread {
override def run = { sup };
}
supThread.start();
try {
main;
} finally {
supThread.interrupt();
}
}
이 같은 행동이 스칼라의 동시 라이브러리를 사용하여 얻을 수 있습니다 : 현재, 나는 표준 자바 스레드를 사용하여 구현했습니다?
http://stackoverflow.com/questions/14449862/kill-or-timeout-a-future-in-scala -2-10/14450095 # 14450095 – sourcedelica
Java API를 사용한 구현은 신뢰할 수 없습니다. 인터럽트가 항상 예상대로 작동하지 않으므로 사용하지 않아야합니다. 조기 종료를 명시 적으로 코딩하는 것이 좋습니다. 위의 주석에 링크되어있는 대답과 같습니다. AtomicBoolean 공유는 가능한 많은 솔루션 중 하나입니다. –