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_ +
" :</B></LABEL> <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
}