Никогда не работал с java.util.Timer, сегодня решил попробовать. Написал небольшой пример, вроде получилось, но появилось некоторые "особенности". Таймер запускаю из сервлета в томкате. Вот код:
| Код | import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Timer;
/** * * @author bio_hazard */ public class index extends HttpServlet {
/** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); Timer timer = new Timer(); timerProcess task = new timerProcess(); timer.schedule(task, 500, 1000);
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> /** * Handles the HTTP <code>GET</code> method. * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); }
/** * Handles the HTTP <code>POST</code> method. * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); }
/** * Returns a short description of the servlet. * @return a String containing servlet description */ @Override public String getServletInfo() { return "Short description"; }// </editor-fold> }
|
а вот объект, экземпляр которого за пускается "по таймеру".
| Код |
package testTimerJsp;
import java.util.TimerTask;
/** * * @author bio_hazard */ public class timerProcess extends TimerTask {
@Override public void run() { System.out.println("15 метод"); }
}
|
Запускаю все пока из нетбинса, после запуска в консоле пишется "15 метод" бесконечное кол-во раз. Это нормально, я и предпологал такую работу. Странности (на мой взгляд) начинаются потом, из томката я удаляю данное приложение. Но строки продолжают печататся. А если изменить строку на "16 метод" и заново запустить то в консоле будет "15 метод" чередоваться с "16 метод" и так до бесконечности. Такую работу я не предпологал. Кто нибуть сможет объяснить почему так происходит? |