두 개의 Java 프로그램이 있습니다. "첫 번째"/ "주"는 검색 알고리즘을 구현하고 "다른"/ "두 번째"는 다중 에이전트 시뮬레이션을 실행하기 위해 Repast 시뮬레이션 프레임 워크를 사용합니다. "첫 번째"자바 프로그램에서 나는 다음과 같은 코드 블록을 가지고 :Program1.run (Program2); HowTo : Program2.finish()? Program1.continue() : Program1.wait();
Class Individual{
public int getvalue()
{
While (Condition is true)
{
Start_MAS(); //start the simulation by calling the "second" Repast simulation program
//which will write some values to a text file at the end of the simulation
//read text file and do some work with the values
}
}}
석사 시뮬레이션/특정 조건이 충족 또는 900 시간 단계를 경과하고, 한 번 할 때까지 시뮬레이션을 실행 "두 번째"프로그램 정지 조건이 충족되면 프로그램은 "첫 번째"프로그램에서 읽은 텍스트 파일에 일부 출력을 씁니다. 이제 제 문제는 "첫 번째"프로그램 (어떤 시점에서 두 번째 프로그램/시뮬레이션을 호출/실행)을 실행하면 시뮬레이션/"두 번째"프로그램이 끝날 때까지 기다리지 않지만 그 후에는 어떻게됩니까? 언젠가 시뮬레이션/"두 번째"프로그램을 실행하면 "첫 번째"프로그램은 출력 텍스트 파일을 읽는 자체 코드를 계속 실행하므로 텍스트 파일이 비어 있다는 오류가 발생합니다.
내 질문은 "두 번째"/ 시뮬레이션 프로그램이 끝날 때까지 "첫 번째"프로그램이 코드 실행을 중단하거나 강제 종료하는 방법입니다 (중지 조건이 충족되고 출력이 텍스트 파일에 기록됨) ? 은 "초"프로그램의
Class Individual{
public int getvalue()
{
While (Condition is true)
{
Start_MAS(); //start the simulation by calling the "second" program which will write some
//values to a text file at the end of the simulation
synchronized(this)
{
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//read text file and do some work with the values
}
}
:
"첫 번째"프로그램의: I는 "최초의"프로그램에 대기를 사용하여 다음과 같이 "초"프로그램 통지 생각
public void step(){ //a function called in each time step in the simulation
If (Stop condition is met)
MyPackage.Individual.notify();
}
그러나이 작업을 수행하면 "두 번째"프로그램에서 돌아온 후에 대기가 실행되고 호출하기 전에 대기하면 시뮬레이션이 시작됩니다. 기다리는 것을 사용하고이를 알리는 올바른 방법을 알려주고 있습니까? 이 작업을 수행하는 방법에 대한 제안이나 요령이 있습니까?
정말 고마워요!
실제 세부 정보를 표시하지 않고 아무도 도움을 드릴 수 없습니다. – jtahlborn
"프로젝트"라는 용어의 사용법이 모호합니다. 프로그램이나 응용 프로그램을 의미합니까? 우리는 또한 "Repast"가 무엇을 의미하는지 알지 못합니다. 귀하의 요구 사항이 너무 모호하고 혼란 스럽습니다. 실행 가능한 것보다 몇 가지 예제 코드를 게시 할 수 있습니까? "Java 동시성"을 조사하고 싶을 수도 있습니다. [최소, 완전한, 유효한 예제를 만드는 방법.] – javajon
나는 repast가 검색에서 나타나는 시뮬레이션 프레임 워크라고 가정합니다. 그럼에도 불구하고, 나는 우리가 아마도 더 많은 세부 사항을 필요로한다는 것에 동의해야 할 것이다.확률은 높습니다. Callable/Future를 사용하여 코드를 단순화하여 대기/알림을하지 않아도됩니다. –