2013-05-02 2 views
0

안녕하세요, 저는 중대한 문제에 봉착했습니다. 나는 응용 프로그램의 대시 보드를 만들었습니다. Dashboard에 표시되는 데이터는 비즈니스 로직을 기반으로 만들어집니다. 이 데이터를 새로 고치는 비동기 트리거이 있습니다. 이러한 트리거는 다른 매개 변수를 기반으로 호출됩니다. 타이머 트리거, Entity Deleted, Entity 추가됨. 이러한 모든 트리거에는 대시 보드의 데이터를 업데이트하는 다른 기능이 있습니다 (이 데이터는 데이터베이스에 저장 됨 즉, 데이터베이스에서 직접 대시 보드 읽기에 데이터를 표시 함). 대시 보드 데이터에 대한 계산에는 다소 시간이 걸립니다.. 내 문제는 두 개의 서로 다른 트리거가 동시에 호출 될 때마다 데이터에서 인디펜던스를 생성한다는 것입니다. 예 : 하나의 트리거는 데이터를 변경하고 다른 트리거는 리셋합니다. 결국에는 원하는 결과를 얻지 못할 것입니다. 이제는 한 번에 하나의 트리거 만 데이터를 업데이트해야하고 다른 트리거는 첫 번째 트리거가 완료 될 때까지 기다려야합니다.함수 호출을 관리하기위한 큐

의 함수 호출을 유지하고 이미 실행중인 메서드가있는 경우 해당 완료를 기다리고 대기열의 다음 메서드를 호출하기 만하면됩니다.

답변

2

ExecutorService이 단일 스레드로 구성되기를 바라고 있습니다. 간단히 각 Runnable을 제출하면 Executor는 실행을 위해 이들을 대기열에 넣습니다. 자세한 내용은 this SO question/answer을 참조하십시오.

0

빠른 픽스로 대기열에 작업을 넣고 연속적으로 실행하는 SwingUtilities.invokeLater(Runnable) 호출에서 각 트리거를 래핑 할 수 있습니다.

대시 보드는 UI 구성 요소이므로 UI ​​대기열을 사용하는 것이 좋습니다.

0

대시 보드 데이터 업데이트 논리를 코드 블록에 넣고 해당 블록에서 잠금을 설정하십시오. 다양한 트리거가 발생하면 자동으로 Lock이 동기식으로 대기합니다.

0
ExecutorService executorService2 = Executors.newFixedThreadPool(1); 

그것은 하나의

에 의한 작업 및 프로세스를 큐
관련 문제