2012-03-13 3 views
0

백그라운드 작업을 수행하는 Java 파일을 호출합니다. 배경 (다른 Java 파일에서)에서 실행중인 스레드로 인해 jsp 페이지로 결과를 리턴 할 수 없습니다. return과 system.exit (0)을 동시에 사용할 수 없다는 것이 알려져 있습니다. 어쨌든 보이는 자바 파일의 쓰레드를 멈추고 그 결과를 리턴 할 수 있는가?백그라운드에서 실행중인 스레드를 중지 한 다음 결과를 반환하십시오.

답변

1

질문을 신중하게 작성하면 도움이됩니다. '다른 Java 파일에서 실행되는 스레드'와 같은 것이 없으므로 정확히 무엇을 의미하는지 명확하지 않습니다.

Java에서 임의의 스레드를 종료하는 간단하고 안전한 방법은 없습니다. 보통 가장 쉬운 방법은 ExecutorService을 사용하고 작업을 제출 한 다음 나중에 결과를 얻거나 작업 실행을 취소하는 데 사용할 수있는 반송 된 Future 개체를 보류하는 것입니다. 작업을 완료하기를 기다리지 않고 ExecutorService를 종료 할 수도 있습니다. 분명히 이러한 경우 취소 작업을 염두에두고 작성해야하므로 원하지 않는 부작용이 없습니다.

0

try {...} catch (InterruptedException ex) {...} 블록에 스레드를 래핑하는 경우 Thread.interrupt() 메서드 (http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#interrupt())를 사용할 수 있습니다. 이렇게하면 스레드를 인터럽트 처리기로 보내어 결과를 반환하기 전에 필요한 항목을 정리할 수 있습니다.

나는 당신이 thread.isInterrupted()를 점검하는 실행 루프에서 어딘가에 있어야한다고 생각하는데, 그렇다면 인터럽트 처리기의 루프를 빠져 나와서 메인 프로그램에서 .interrupt()를 호출 할 때가있다. 스레드가 인터럽트 처리기로 점프하지 않습니다. 이 모든 세부 사항은 이전에 링크 된 페이지에 있습니다.

0

의도는 분명하지 않지만 Java FutureScheduledFuture 인터페이스와이를 사용하는 멀티 스레딩 클래스를 살펴볼 수 있습니다.

관련 문제