Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当应用程序刷新以第二次重新加载类时,为什么要使用while循环来阻止下次加载类?_Java_Multithreading_Java Web Start - Fatal编程技术网

Java 当应用程序刷新以第二次重新加载类时,为什么要使用while循环来阻止下次加载类?

Java 当应用程序刷新以第二次重新加载类时,为什么要使用while循环来阻止下次加载类?,java,multithreading,java-web-start,Java,Multithreading,Java Web Start,我正在开发一个客户机(java)-服务器(c++)应用程序。我们使用浏览器中的url启动应用程序http:\\[ip os服务器]:[port]。html加载到主浏览器窗口中,弹出窗口(应用程序)出现,该窗口负责显示服务器的功能 我们有一个类ShowServerStatusServlet,它负责服务器状态,即未知/完成 @Override public void doGet(HttpServletRequest request, HttpServletResponse response)

我正在开发一个
客户机(java)-服务器(c++)
应用程序。我们使用浏览器中的url启动应用程序
http:\\[ip os服务器]:[port]。html
加载到主浏览器窗口中,弹出窗口(应用程序)出现,该窗口负责显示服务器的功能

我们有一个类
ShowServerStatusServlet
,它负责服务器状态,即未知/完成

@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException
    {
       synchronized (this)
        {
          out.println("<LABEL><B>" + serverStatusLabel_ +
                        "&nbsp;:</B></LABEL>&nbsp;<SPAN ID='ServerStatus'>" +
                        serverStatus_+ "</SPAN>");  
         }  
     }
成功了

但我现在面临的问题是,如果我剪切弹出窗口并刷新主浏览器,则重新加载应用程序弹出窗口与服务器状态无关(无,显示状态的区域为空)

没有while循环的代码没有这个问题,这意味着服务器状态即将到来,即使我们剪切弹出窗口并再次刷新主浏览器以启动应用程序(弹出窗口)

提前感谢

1。您正在显示服务器Java代码,并声称只有客户机使用Java。2. <在
doGet
中进行code>synchronized肯定是错误的。它将使您的服务器实际上是单线程的。您的(大概是
静态的
服务器状态
字段
易失性的
?否则,处理请求的线程可能看不到在其他线程中进行的更新。考虑只通过一个公共锁对象上的同步来访问所有线程(不是<代码>这个<代码> -其他线程将没有引用)
synchronized (this)
{
    while(!statusUpdated_)
    {
       try{
           Thread.sleep(20000);
        }
        catch(InterruptedException e){
            e.printStackTrace();
        }
    }
    out.println(.............................    
  //some other code
}