Play框架控制器操作是否同步?

use*_*274 3 playframework

我最近测试了一些代码,当我注意到每个控制器操作/方法一次只有一个活动线程时,我有点意外.例如,请考虑控制器的以下2个操作:

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");
}
Run Code Online (Sandbox Code Playgroud)

从2个浏览器会话中调用testThread(),在任何给定时间只执行1.第二个请求等待第一个请求完成.但是,从一个浏览器调用testThread()和从另一个浏览器调用testThread2()会产生预期的结果.只是为了澄清默认线程(play.pool)的数量增加,并且当在Tomcat中作为WAR运行时,这种行为也存在.

任何人都可以解释为什么会发生这种情况,是否有办法防止这种行为?

use*_*274 5

在做了更多测试之后,如果它是相同的浏览器或不同的浏览器(可能取决于播放会话),则会有所不同.

例如,同时访问同一控制器的2个Chrome标签将是顺序的.

但是,Chrome中的1和Safari中的1将按预期进行多线程处理.