2012-03-30 4 views
1

주어진 Runnable 객체.Runnable의 시간 결정적 실행

public class Test implements Runnable { 

    @Override 
    public void run() { 

     int x = 2; 
     int y = 6; 
     // Snip more code 
     int w = x - 1; 
     int z = x * y;   

    } 

} 

정확한 작업 수를 실행하고 싶습니다. 예 :

Test t = new Test(); 
Executor.execute(t, 100); // Arbitrary unit of operations 

있도록 내가이 실행을 처음까지 실행하는 경우 :

int w = x - 1; 

내가 같은 시점까지 실행이 발생할 것 같은 매개 변수를 사용하여 메소드를 호출 다른 시간.

주변을 둘러 보았고 적합한 내용을 볼 수 없습니다 (예 : ScheduledThreadPoolExecutor가 내가 알 수있는 한 제대로 작동하지 않음).

이 코드를 작성하려면 바이트 코드 수준으로 이동해야합니까? 내가 읽은 바로는 JIT가 여기에서도 문제를 일으킬 수 있습니다.

+0

작업의 의미는 무엇입니까? 자바 전화가 왔어? 바이트 코드 연산? 프로세서에 op가 있습니까? – ControlAltDel

답변

1

바이트 코드를 삽입하여 모든 작업 후에 시간 초과를 확인할 수 있습니다. 이렇게하면 100 배 느려지거나 더 많아 질 수 있지만 결정적입니다.

실용적인 apporach는 Runnable에 코드를 추가하여 chosing의 시간 제한을 확인하는 것이 좋습니다.

+0

코드 커버리지 도구가 작동하는 방식과 비슷하다고 생각합니다. 이 문제를 해결하고 성능에 미치는 영향을 확인해야합니다. – Karle

2

당신과 같이 명령 객체에 작업을 마무리 할 수 ​​:

public interface Operation {  
    int executeOp(int prevResult); 
} 

실행 가능한 이러한 개체의 목록을 유지하고 단지 말을 그 처음 100를 부를 것이다.