2012-08-08 6 views
0

동시에 실행해야하는 쿼리 집합이 있습니다. 이를 위해 각 쿼리에 대해 Runnable 스레드를 시작하여 while 루프에서 쿼리 목록을 반복하여 호출합니다.스레드를 사용하여 쿼리의 응답 시간 계산

스레드는 각 쿼리를 실행하고 각 쿼리가 실행하는 데 걸리는 시간도 계산합니다. 이것은 diff를 얻는 시작 시간과 끝 시간을 캡처하여 수행됩니다. 이 시간은 각 쿼리마다 고유해야하며 해당 쿼리와 함께 인쇄해야합니다./

이 시나리오에서는 시간을 캡처하고 표시해야합니까? 동기화 문제가 발생합니까?

+0

시간을 검색하고 표시하기 전에 모든 스레드가 완료되었는지 확인해야합니다. –

+0

@ BheshGurung 그래서 어딘가에 시간과 함께 쿼리를 저장하면 저장된 시간이 해당 쿼리가 아닌 다른 쿼리가 될 것이라고 확신 할 수 있습니까? 내가 약 100 개의 스레드를 시작할 것이기 때문에, 어떤 중복이나 동기화 prob가 없을 것입니다. – Chillax

+0

약간 혼란 스럽습니다. 순차적으로 모든 쿼리를 실행하는 스레드가 있습니까? 아니면 각 쿼리에 대해 하나의 개별 스레드를 시작합니까? –

답변

1

이 질문은 너무 일반적입니다. 동시성 문제가 발생합니까? 아마도. 각 Runnable간에 Object를 공유합니까? 당신이하는 경우 문제가있을 수도, 그렇지 않으면 안돼. - 루프 예를 들어 다음과 같습니다 경우

(이 코드는 점을 증명 작동하지 않음) :

for(int i=0;i<queries.size();++i){ 
    String query = queries.get(i); 
    new Thread(new Runnable() { 
     public void run() { 
      //Execute the query 
     } 
    }); 
} 

각 스레드 일부 공유 데이터에 액세스하지 않고 그 자체가 쿼리 실행됩니다 - 다음 아니, 당신은 것입니다 적어도 Java 코드에서는 동시성 문제가 없습니다. 데이터베이스에 문제가있을 수 있습니다 (예 : 여러 행에서 동일한 행을 업데이트하려고하는 쿼리).

1

이 시나리오에서는 시간을 캡처하여 표시해야합니까? 에서 동기화 문제가 발생합니까?

잘 모르시겠습니까? Runnable 인스턴스 각각에 대해 실행 시간을 추적하는 멤버 필드를 가지고 계신 후 모든 스레드가 완료되면 Runnables을 반복하고 데이터를 표시하십시오. 당신 외에는 당신의 진정한 의도가 무엇인지 알지 못합니다. 내가 아는 두 가지 동기화 문제가 있습니다 : Deadlock & Race 조건. 어느 쪽도이 시나리오에 적용되지 않습니다.