spring quartz 는 다 중 스 레 드 를 사용 하여"함정"을 병행 합 니 다.

더 읽 기
job:ranJob 을 정의 합 니 다.설정 은 1 초 에 한 번 씩 실행 되 며,설정 은 덮어 쓰 고 실행 할 수 없습니다.
 
	
	
		
		
		false" />
	
	
		
		
		1000" />
	

 
job 코드:
		System.out.println("Start job");
		ExecutorService exec = Executors.newFixedThreadPool(1);
		
		Thread thread = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("thread start");
				try {
					Thread.sleep(3000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println("thread end");
			}
		});
		exec.execute(thread);
		System.out.println("end job");

 
프로그램 출력 결과:
Start job
end job
thread start
Start job
end job
thread start
Start job
end job
thread start
Start job
end job
thread start
thread end

 
결 과 를 통 해 알 수 있 듯 이 job 의 병렬 덮어 쓰기 설정 은 전혀 적용 되 지 않 은 것 같 습 니 다.그 이 유 는 job 가 다 중 스 레 드 실행 상황 에 관심 이 없 기 때 문 입 니 다.
job 코드 를 수정 하고 다음 코드 를 추가 하여 job 접근 마지막 에 스 레 드 처리 가 끝 났 습 니 다.
 
        while (!exec.isTerminated()) {
            //          ,      
        }

 
코드 수정 후 프로그램 결과:
Start job
thread start
thread end

 
job 가 끝나 지 않 은 것 을 볼 수 있 습 니 다.이 는 ExecutorService 가 종료 되 지 않 았 음 을 설명 합 니 다.문 서 를 보고 shutdonw()방법 을 추가 합 니 다.job 의 모든 코드 는 다음 과 같 습 니 다.
	public void execute() throws InterruptedException {
		System.out.println("Start job");
		ExecutorService exec = Executors.newFixedThreadPool(1);
		
		Thread thread = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("thread start");
				try {
					Thread.sleep(3000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println("thread end");
			}
		});
		exec.execute(thread);
		exec.shutdown();
        while (!exec.isTerminated()) {
            //          ,      
        }		
		System.out.println("end job");
	}

 
인쇄 결 과 는 다음 과 같 습 니 다.
 
Start job
thread start
thread end
end job

Start job
thread start
thread end
end job

Start job
thread start
thread end
end job

 
 
OK,이로써 spring quartz 다 중 스 레 드 병행 문제 해결.돌 이 켜 보면 우 리 는 isTerminated()방법 등 다 중 스 레 드 가 끝 난 후에 job 를 끝내 야 합 니 다.다 중 스 레 드 퀘 스 트 발송 이 끝 난 후 shutdown()방법 으로 스 레 드 를 순서대로 닫 아야 합 니 다(작업 을 수행 하고 있 습 니 다.새 작업 을 받 지 않 습 니 다)

좋은 웹페이지 즐겨찾기