나는 최근에 몇몇 코드를 테스트 중이었고 컨트롤러 액션/메소드 당 한 번에 하나의 스레드 만 활성화되었다는 사실에 놀랐다. 예를 들어, 컨트롤러에 대해 다음 두 작업을 고려하십시오Play 프레임 워크 컨트롤러 작업이 동기화 되었습니까?
public static void testThread()
{
Logger.info("Start");
try
{
Logger.info("Sleeping...");
Thread.sleep(30000);
}
catch (Exception e)
{
}
Logger.info("End");
}
public static void testThread2()
{
Logger.info("Start");
try
{
Logger.info("Sleeping...");
Thread.sleep(30000);
}
catch (Exception e)
{
}
Logger.info("End");
}
2 개 브라우저 세션에서 testThread()를 호출은 만 1 주어진 시간에 실행됩니다. 두 번째 요청은 첫 번째 요청이 완료 될 때까지 대기합니다. 그러나 한 브라우저에서 testThread()를 호출하고 다른 브라우저에서 testThread2()를 호출하면 예상 된 결과가 나타납니다. 기본 스레드 (play.pool)의 수가 증가되었고 Tomcat에서 WAR로 실행될 때이 동작이 존재한다는 것을 명확히하기 위해.
아무도 왜 이런 일이 벌어지고 있는지 설명하고이 동작을 방지 할 수있는 방법이 있습니까?
찌르기 모드 또는 dev 모드로 실행 중이십니까? –
실제로 Dev에서는 단일 스레드를 제공합니다. –
Tomcat에서 배포 할 때 PROD 모드가 있어야합니다. 따라서 Tomcat에서는 동일한 브라우저에서 요청할 때만이 동작이 존재하지 않습니다. – adis