我最近正在测试一些代码,并且当我注意到每个控制器动作/方法一次只有一个线程处于活动状态时有点惊讶。例如,考虑以下2个操作控制器,用于: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运行时,这种行为也存在。
任何人都可以解释为什么会发生这种情况,是否有办法防止这种行为?
您是在prod模式还是dev模式下运行? – 2012-02-17 19:48:48
事实上,在Dev中,它将服务于单线程。 – 2012-02-18 17:16:36
当在TomCat中进行部署时,它应该强制执行PROD模式,因此只有在从同一浏览器请求时,TomCat中才会存在此行为... – adis 2012-02-18 17:46:56