2012-06-16 5 views
3

일부 학술 연구에서는 단일 프로세서에서 실행되는 여러 스레드를 시뮬레이트해야합니다.자바에서 스레드 스케줄링 시뮬레이션 (스택리스 자바?)

내 코드에 * call_scheduler() * 호출을 삽입 할 수 있기를 원합니다. 현재 "스레드"가 멈추고 (어떤 코드 줄인지 기억) 일정 스케줄링 함수가 놓을 스레드를 결정합니다 .

파이썬에서는 스택이없는 파이썬을 사용하여 깔끔하게 구현할 수 있습니다. Java 대안이 있습니까?

실제 스레드와 한 번에 하나의 스레드 만 실행하게하는 일부 메시징 큐 (또는 파이프)를 사용하여 구현할 수 있습니다. 그러나 이것은 추악하고 문제가되는 솔루션입니다.

+0

나는이 코드를 java에서 수행하는 명시적인 방법이 없다고 생각한다. 몇 줄의 코드를 작성해야한다. & semaphores & priority queues를 사용할 수있다. –

답변

0

귀하의 질문 :

내가 진짜 스레드와 일부 메시징 큐 (또는 파이프) that will force only one thread to run at a time를 사용하여 구현할 수 있습니다 -하지만 당신이 실행하는 하나의 스레드 만하려면이 음 못생긴 및 문제 해결

입니다 하나의 스레드 만이 접근에게

을 할 수있는 시간에, 깨끗한 방법으로 개체에 스레드의 액세스를 제어하여, 다음 여기 Semaphores in java.util.concurrent package.

Semaphores sem = new Semaphores(1); // 1이 표시됩니다 사용3210

sem.acquire() to get the key of the object, and when its done, use sem.release()을 사용하면 다른 스레드 만이 객체에 액세스 할 수 있습니다.

+0

하지만 스케줄러 - 스레드에서 제어 할 수 있기를 원한다. 계속 - 그래서 모든 스레드에 하나씩 세마포어 배열이 필요합니다. – Oren

+0

세마포어의 HashMap을 만들면 first_thread, second_thread ... 등의 키로 식별 할 수 있습니다. –

+0

네이티브 스케줄러는 모든 스레드가 세마포를 기다리고 하나의 스레드 만 활성화 될 수 있음을 충분히 이해합니다 - 그래서 그것을 멈출 이유가 없습니까? – Oren

1

스칼라 배우 프레임 워크는 이렇게이 연속성을 패키지 선제 스케줄러를 구현하는 방법을 알고에 관심이있을 것입니다. 각 스레드는 어떻게 그렇게 효율적으로 생성되었는지 많은 액터를 처리합니다. 소스 코드를 살펴 보는 것이 좋습니다.