请教关于thread超时的问题(急) 这几天在做一个关于thread的程序。但是对于线程不熟,还请大家赐教。做了一个简单的例子。启动线程的时候开始计数(FOR循环中),现在看运行时间,如果时间大于6000的时候中止数数,为什莫没有中止掉,而是继续把数数完了呢。能不能提示一下该怎末做啊。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把自己写的例子贴上public class ThreadTimeout extends Thread{ public long startTimeMillis = 0; Thread thread; public ThreadTimeout(){ this.startTimeMillis=System.currentTimeMillis(); System.out.println("startTimeMillis"+startTimeMillis); } public static void main(String args[]){ ThreadTimeout a=new ThreadTimeout(); a.start() ; } public void run() { count(); long accessTime = System.currentTimeMillis() - startTimeMillis; if(timeout(accessTime)){ thread=null; } } private void count(){ for(int i=0;i<1000000;i++){ System.out.println(i); } } private boolean timeout(long accessTime){ while(accessTime>60){ String flag="1"; System.out.println("flag "+flag); //a.stop(); thread.interrupt() ; thread=null; return true; } return false; }} while(accessTime>60){大于60ms。。 错误一:你的run里面是count()执行完,才会if(timeout(accessTime)){ thread=null; };错误二:一中代码中的thread是什么,你自己清楚了吗?是否给它赋过值错误三:即使你的thread指到自身,但是thread=null就会停止线程吗? to:cyfnjtu(迎风) 能不能帮我把代码修改一下,实现超时时停止线程,并且停止数数 public class ThreadTimeout extends Thread { public long startTimeMillis = 0; public volatile boolean finished = false; Thread thread; public ThreadTimeout() { this.startTimeMillis = System.currentTimeMillis(); System.out.println("startTimeMillis" + startTimeMillis); start(); } public static void main(String args[]) { ThreadTimeout a = new ThreadTimeout(); a.count(); } public void run() { while(!finished){ timeout(); } } private void count() { for (int i = 0; i < 1000000; i++) { if (finished) { System.out.println("finished"); break; } System.out.println(i); } } private boolean timeout() { long accessTime = System.currentTimeMillis() - startTimeMillis; while (accessTime < 600) { System.out.println("accessTime " + accessTime); return true; } finished=true; return false; } } TO cyfnjtu(迎风) 顺便问一句,用stop或者interupt不能真正的停止线程,而只能通过flag去强制停止? public class ThreadTimeout extends Thread{ public long startTimeMillis = 0; public ThreadTimeout(){ this.startTimeMillis=System.currentTimeMillis(); System.out.println("startTimeMillis"+startTimeMillis); } public static void main(String args[]) { ThreadTimeout a=new ThreadTimeout(); a.start() ; } public void run() { count(); } private void count(){ for(int i=0;i<1000000;i++){ try{Thread.sleep(100);} catch(Exception e) { } System.out.println(i); long accessTime = System.currentTimeMillis() - startTimeMillis; if(accessTime>2000) break; } }} 这样应该可以了,加个sleep看的更清楚, 求助,如何在用户登入系统后在进行任何操作前都会提示“请先修改密码”? java编程思想中的一个if-else程序片段,怎么完成? url中参数的问题 这样的文本内容是用read()方法吗? 求助:生成pdf文档,出现outOfMemoryError 关于java服务器的问题!来者有分! java 中有关向量的成员变量的引用问题-各位提提建议 200分求一个打印的例子我老也做不对(再线等待) java文件操作的问题 VRML高手请回话!!! 接口interface和委托delegate的详细解释,最好能举例说明,我基本是一头雾水,不知道怎么广泛应用 高手求救啦!!
public class ThreadTimeout extends Thread{
public long startTimeMillis = 0;
Thread thread;
public ThreadTimeout(){
this.startTimeMillis=System.currentTimeMillis();
System.out.println("startTimeMillis"+startTimeMillis);
}
public static void main(String args[]){
ThreadTimeout a=new ThreadTimeout();
a.start() ;
}
public void run() {
count();
long accessTime = System.currentTimeMillis() - startTimeMillis;
if(timeout(accessTime)){
thread=null;
}
}
private void count(){
for(int i=0;i<1000000;i++){
System.out.println(i);
}
}
private boolean timeout(long accessTime){
while(accessTime>60){
String flag="1";
System.out.println("flag "+flag);
//a.stop();
thread.interrupt() ;
thread=null;
return true;
}
return false;
}
}
thread=null;
};
错误二:一中代码中的thread是什么,你自己清楚了吗?是否给它赋过值
错误三:即使你的thread指到自身,但是thread=null就会停止线程吗?
能不能帮我把代码修改一下,实现超时时停止线程,并且停止数数
public volatile boolean finished = false; Thread thread; public ThreadTimeout() { this.startTimeMillis = System.currentTimeMillis();
System.out.println("startTimeMillis" + startTimeMillis);
start();
} public static void main(String args[]) {
ThreadTimeout a = new ThreadTimeout();
a.count();
} public void run() {
while(!finished){
timeout();
}
} private void count() {
for (int i = 0; i < 1000000; i++) {
if (finished) {
System.out.println("finished");
break;
}
System.out.println(i);
}
} private boolean timeout() {
long accessTime = System.currentTimeMillis() - startTimeMillis;
while (accessTime < 600) {
System.out.println("accessTime " + accessTime);
return true;
}
finished=true;
return false;
}
}
顺便问一句,用stop或者interupt不能真正的停止线程,而只能通过flag去强制停止?
public long startTimeMillis = 0;
public ThreadTimeout(){
this.startTimeMillis=System.currentTimeMillis();
System.out.println("startTimeMillis"+startTimeMillis);
}
public static void main(String args[]) {
ThreadTimeout a=new ThreadTimeout();
a.start() ;
}
public void run() {
count();
}
private void count(){
for(int i=0;i<1000000;i++){
try{Thread.sleep(100);}
catch(Exception e)
{
}
System.out.println(i);
long accessTime = System.currentTimeMillis() - startTimeMillis;
if(accessTime>2000)
break;
}
}
}
这样应该可以了,加个sleep看的更清楚,