没实际试过代码。不过感觉你的doTask是一直循环的,没有退出,当然没办法继续作下一步的事情了。至少应该采用线程地方式来做循环才对巴。
解决方案 »
- 我们爱分享----Ext经验谈(二)--动态列
- s2sh异常
- 请问谁有jsp分页控件
- cookie用法
- 乱码问题
- spring的web应有有没有必要学
- 关于Axis2学习的问题,大家来看看
- [wldeploy] at java.io.File.<init>(File.java:194)
- 求javascript高手帮忙!
- -------------------------XML-----------------------------SOS------------------------XML---------------------------
- soap传送二进制附件问题求解,253...好心人帮帮我吧,头痛中。
- 最近组长让我写单元测试的东西,哪位给推荐一些关于Junit方面的资料,不胜感激。
那个改成线程的就行了,你这个是一直循环
{
super.init(config);
System.out.println("task start!");
doTask();
}
public void doTask() {
try {
demo();
loopTime();
} catch (Exception e) {
} }
改成这样在看看
loopTime()
demo()
全部都放到一个线程去做定义一个线程public class dotask extends Thread{
public void run(){}
//那3个方法全都放在dotask这个线程里。
//run();是入口
}在servlet中的init中调用这个线程
init(){
dotask task=new dotask();
task.start();
}
这样就行了
to xitianjile(空想社會主義) :这个方法可以,但还有小问题,就是好像它启动了两个线程做run,比如我设置的sleep8秒,但实际中隔3秒就执行一下,而且再观察,两个中的第一个是有效的,第二个输出一个错误的结果。还望再次指教,谢谢!
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;public class PrimeSearcher extends HttpServlet implements Runnable { long lastprime = 0; // last prime found
Date lastprimeModified = new Date(); // when it was found
Thread searcher; // background search thread public void init() throws ServletException {
searcher = new Thread(this);
searcher.setPriority(Thread.MIN_PRIORITY); // be a good citizen
searcher.start();
} public void run() {
// QTTTBBBMMMTTTOOO
long candidate = 1000000000000001L; // one quadrillion and one // Begin loop searching for primes
while (true) { // search forever
if (isPrime(candidate)) {
lastprime = candidate; // new prime
lastprimeModified = new Date(); // new "prime time"
}
candidate += 2; // evens aren't prime // Between candidates take a 0.2 second break.
// Another way to be a good citizen with system resources.
try {
searcher.sleep(200);
}
catch (InterruptedException ignored) { }
}
} private static boolean isPrime(long candidate) {
// Try dividing the number by all odd numbers between 3 and its sqrt
long sqrt = (long) Math.sqrt(candidate);
for (long i = 3; i <= sqrt; i += 2) {
if (candidate % i == 0) return false; // found a factor
} // Wasn't evenly divisible, so it's prime
return true;
} public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/plain");
PrintWriter out = res.getWriter();
if (lastprime == 0) {
out.println("Still searching for first prime...");
}
else {
out.println("The last prime discovered was " + lastprime);
out.println(" at " + lastprimeModified);
}
} public void destroy() {
searcher.stop();
}
}
当然你也可以把Thread searcher; 写到其它的地方,记得这个:
public void destroy() {
searcher.stop();
}
* Created on 2005-1-26
*
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.techcreate.resources;/**
* @author CMSDB
*
* Preferences - Java - Code Style - Code Templates
*/
import java.util.TimerTask;
import javax.servlet.*;
import javax.servlet.http.*;public class Task extends HttpServlet implements Runnable {
Thread mytask; // background search thread
public void init() throws ServletException {
System.out.println("task start!");
// doTask();
mytask = new Thread(this);
mytask.setPriority(Thread.MIN_PRIORITY); // be a good citizen
mytask.start();
} private static XmlOutput xmloutput = XmlOutput.getXmlOutput(); public void destroy() {
mytask.stop();
} /* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
public void run() {
long delay = 8000;
java.util.Date thisTime = new java.util.Date();
java.util.Date lastTime = new java.util.Date();
while (true) {
try {
thisTime.setTime(System.currentTimeMillis());
//调用定时任务,隔8秒运行
xmloutput.output();
System.out.println("Task do!");
Thread.sleep(delay);
lastTime.setTime(thisTime.getTime());
} catch (InterruptedException e) {
}
}
}
}
控制台输出如下:
2005-1-28 9:13:04 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
Starting service Tomcat-Standalone
Apache Tomcat/4.1.31
WebappClassLoader: validateJarFile(E:\peopleold\defaultroot\WEB-INF\lib\j2ee.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
task start!**************************************启动了一个线程
2005-1-28 9:13:14 org.apache.struts.util.PropertyMessageResources <init>
信息: Initializing, config='org.apache.struts.util.LocalStrings', returnNull=true
2005-1-28 9:13:14 org.apache.struts.util.PropertyMessageResources <init>
信息: Initializing, config='org.apache.struts.action.ActionResources', returnNull=true
2005-1-28 9:13:15 org.apache.struts.util.PropertyMessageResources <init>
信息: Initializing, config='org.apache.webapp.admin.ApplicationResources', returnNull=true
WebappClassLoader: validateJarFile(E:\peopleold\defaultroot\WEB-INF\lib\j2ee.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
task start!**************************************为什么又启动了一个??????
2005-1-28 9:13:28 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2005-1-28 9:13:29 org.apache.jk.common.ChannelSocket init
信息: JK2: ajp13 listening on /0.0.0.0:8009
2005-1-28 9:13:29 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=16/312 config=C:\Tomcat4\conf\jk2.properties
Task do!
Task do!
Task do!
out put JiFen ok***************************这是所调用的xmloutput.output();方法的输出信息
Task do!
Task do!
out put JiFen ok
Task do!
Task do!
out put JiFen ok
Task do!
Task do!
out put JiFen ok
Task do!
Task do!
out put JiFen ok
Task do!
Task do!
out put JiFen ok
Task do!
Task do!
Task do!
out put JiFen ok
Task do!
Task do!
out put JiFen ok
Task do!上面中
out put JiFen ok
Task do!
为一对正确的输出,但为什么还有一个task do不去调用我让执行的方法呢?我也估计是线程设计的有问题,但自己所知不多,还望朋友指教!
再次谢谢啦!