Мне нужно показать код, объясняющий мою проблему.
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ServletContextAttribListener implements ServletContextListener
{
private ServletContext context = null;
private MyThread myThread = new MyThread(true);
// This method is invoked when the Web Application
// is ready to service requests
public void contextInitialized(ServletContextEvent event)
{
this.context = event.getServletContext();
// Output a simple message to the server's console
myThread.start();
System.out.println("The Simple Web App. Is Ready");
}
public void contextDestroyed(ServletContextEvent event)
{
// Output a simple message to the server's console
System.out.println("The Simple Web App. Has Been Removed");
myThread.setB(false);
this.context = null;
}
public class MyThread extends Thread
{
private boolean b;
public MyThread(boolean b)
{
this.b = b;
}
@Override
public void run()
{
int i = 0;
int j = 0;
while (b)
{
//This part is important
for (i = 0; i < 1000000; i++)
{
}
//
j++;
}
System.out.println("Thread stopped i:->" + i + " j:->" + j);
}
public boolean isB()
{
return b;
}
public void setB(boolean b)
{
this.b = b;
}
}
}
Как видите, это очень маленькая и пустышка.Я не писал web.xml, я просто использую класс слушателя.Когда я запускаю войну, запускаю и останавливаю tomcat, вывод программы:
The Simple Web App. Is Ready
The Simple Web App. Has Been Removed
Thread stopped i:->1000000 j:->17296
Как вы можете видеть, я равен 1000000, как в цикле for.То, что я хочу, это разорвать цикл независимо от того, равен ли я 1000000 или меньше.
Можно сказать, что я могу использовать условие b с i <1000000 </strong> дляцикл, но в моей настоящей программе у меня нет этого цикла.У меня просто есть цикл while, как здесь, но с множеством строк кода внутри.Я не хочу каждый раз проверять b .
Кстати, я не могу использовать сон / прерывание.