자바 구현 작업 시간 초과 처리 방법
4500 단어 자바과업시간 을 초과 하 다
1.비동기 작업 결과 에 따 른 시간 초과 획득
비동기 작업 결 과 를 바탕 으로 얻 는 것 은 보통 스 레 드 탱크 와 함께 사용 합 니 다.우 리 는 스 레 드 탱크 에 작업 을 제출 할 때 Future 대상 을 되 돌려 줍 니 다.Future 의 get 방법 을 호출 할 때 시간 초과 시간 을 설정 할 수 있 습 니 다.설정 한 시간 을 초과 하면 작업 이 끝나 지 않 으 면 이상 을 던 집 니 다.다음 코드 보기:
public class FutureDemo {
static ExecutorService executorService= Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*2);
public static void main(String[] args) {
Future<String> future = executorService.submit(new Callable<String>() {
@Override
public String call() {
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
System.out.println(" 。");
}
return "OK";
}
});
try {
String result = future.get(2, TimeUnit.SECONDS);
} catch (InterruptedException |ExecutionException | TimeoutException e) {
future.cancel(true);
System.out.println(" 。");
}finally {
System.out.println(" 。");
}
}}
실행 코드,출력 은 다음 과 같 습 니 다:2.시간 지연 작업 을 사용 하여 시간 초과 작업 을 종료 합 니 다.
또 하나의 작업 시간 초과 처 리 를 실현 하 는 사고방식 은 작업 을 제출 하기 전에 타 이 머 를 설정 하 는 것 이다.이 타 이 머 는 설 정 된 시간 간격 후에 작업 을 취소 할 것 이다.물론 임무 가 정 해진 시간 안에 완성 된다 면 타 이 머 를 취소 하 는 것 을 기억 해 야 한다.우선 우리 의 작업 라인 을 살 펴 보 자.
public class RunningTask {
private volatile boolean isStop;
public void stop(){
this.isStop=true;
}
public void doing() {
int i=1;
while (!isStop){
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
}
}
System.out.println(" 。");
}
}
이 작업 스 레 드 는 1 초 마다 isStop 변 수 를 검사 하기 때문에 isStop 변 수 를 통 해 작업 을 취소 할 수 있 습 니 다.작업 을 취소 하 는 논리 에 대해 서 는 타이머 에 넣 었 습 니 다.코드 는 다음 과 같 습 니 다.
public class CancelTask implements Runnable {
private RunningTask runningTask;
public CancelTask(RunningTask runningTask) {
this.runningTask = runningTask;
}
@Override
public void run() {
runningTask.stop();
}
}
이 타이머 의 역할 은 일정 시간 후에 작업 스 레 드 의 운행 을 중단 하 는 것 임 을 알 수 있다.다음 테스트:
public class ScheduleDemo {
static ScheduledExecutorService executorService= Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors()*2);
public static void main(String[] args) {
RunningTask runningTask=new RunningTask();
ScheduledFuture<?> scheduledFuture = executorService.schedule(new CancelTask(runningTask), 3, TimeUnit.SECONDS);
runningTask.doing();
if(!scheduledFuture.isDone()){
scheduledFuture.cancel(true);
}
}
}
실행 결 과 는 다음 과 같 습 니 다.미 션 이 시간 을 초과 한 후에 도 취소 되 는 것 을 볼 수 있다.
총결산
위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 자바 의 임무 수행 시간 초과 처리 방법 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 제때에 여러분 에 게 답 할 것 입 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.