다음과 같이 가정 해 봅시다 :시간 제한 기능
function requestValue
:이 함수를 여러 번 호출해야합니다. 내가 호출 할 때마다, 어떤 값을 계산해야한다. X
그런 다음 계산 된 값을 매개 변수로 사용하여 다른 함수 submitValue(X)
을 호출해야한다. 그러나 5 초 이내에 계산이 완료되지 않으면 submitValue(-1)
을 호출해야합니다.
이것은 가능한 한 간단하게 질문을하기 위해 필요한 것의 예제이며, 함수는 아무 것도 계산하지 않습니다 (수면 시간 제한을 시뮬레이션하는 데 사용됨). 내가 무슨 짓을
는 스레드 클래스를 확장하고, 중지로 스레드를 표시하는 기능을 추가 :
void requestValue(){
myThread thread = new myThread();
Timer myTimer = new Timer(1000 , new ActionListener(){
@Override
public void actionPerformed(ActionEvent ae) {
thread.Stop();
submitValue(-1);
}
}
);
myTimer.setRepeats(false);
myTimer.start();
thread.start();
}
submitValue
기능 현재 단지 인쇄 :
class myThread extends Thread{
boolean stop = false;
@Override
public void run(){
Random rand = new Random();
try {
Thread.sleep(200*rand.nextInt(10));
} catch (InterruptedException ex) {
Logger.getLogger(myClass.class.getName()).log(Level.SEVERE, null, ex);
}
if (stop == false)
submitValue(1);
}
void Stop(){
stop = true;
}
}
가 requestValue
기능입니다 (1 또는 -1).
이렇게하면 제한 시간이 초과되면 submitValue(1)
함수가 호출되지 않지만 submitValue(-1)
은 항상 호출됩니다. 청취자에게 submitValue(1)
이 호출되었거나 다시 호출되지 않는다는 것을 어떻게 알릴 수 있습니까? 그리고 내가 사용하는 방식보다 더 나은 방법이 있을까요?
또 다른 문제는 모든 -1
이 나타나기 전에 모든 1
이 인쇄되고 있다는 것입니다. 그 이유는 무엇입니까?
감사합니다.