怎样给方法加一个timeout?

要求:
设计一个方法,形如
public void a(int timeout) throws TimeOutException(){
...
}
a()在执行过程中要注意时间限制,当超过timeout时就抛出一个TimeOutException

怎样才能实现?

这个问题其实很困难,很多高手都没有办法

public class A implemts Runnable{
public void run(){
try{
a(5000);
}catch(TimeOutException e){
e.printStackTrace();
}
}
public void a(int timeout)throws TimeOutException{
if(timeout>=5000) throw new TimeOutException();
}
}

忘了加时间,应该这样:
public class A extends Thread{
int outTime=5000;
public static int time=0;
public void run(){
try{
while(true){
sleep(outTime);
a(time);
}
}catch(TimeOutException e){
e.printStackTrace();
}
}
public void a(int time)throws TimeOutException{
if(time>=outTime) throw new TimeOutException();
}
}


测试代码:
public class Foo{
public static void main(String[] args){
A a=new A();
a.time=2000;//你可以换成6000再试试
}
}

忘了起动线程,应该这样:
public class A extends Thread{
int outTime=5000;
public static int time=0;
public void run(){
try{
while(true){
sleep(outTime);
a(time);
}
}catch(TimeOutException e){
e.printStackTrace();
}
}
public void a(int time)throws TimeOutException{
if(time>=outTime) throw new TimeOutException();
}
}


测试代码:
public class Foo{
public static void main(String[] args){
A a=new A();
a.start();
a.time=2000;//你可以换成6000再试试
}
}

> 忘了起动线程,应该这样:
> public class A extends Thread{
> int outTime=5000;
> public static int time=0;
> public void run(){
> try{
> while(true){
> sleep(outTime);
> a(time);
> }
> }catch(TimeOutException e){
> e.printStackTrace();
> }
> }
> public void a(int time)throws TimeOutException{
> if(time>=outTime) throw new TimeOutException();
> }
> }
>
>
> 测试代码:
> public class Foo{
> public static void main(String[] args){
> A a=new A();
> a.start();
> a.time=2000;//你可以换成6000再试试
> }
> }


真是精彩绝伦啊!恭喜Azure_2003,大有BT的潜智啊!
呵呵,此贴不跟不行啊

Azure_2003 :
多谢捧场,不过
你的方法是让a()循环执行并检查时间的,我要的是a()执行一次的过程中注意时间限制。

public class A {
int outTime = 5000;
boolean isfinished=false;

private void timeout(final int outtime){
Runnable r=new Runnable(){
public void run(){
try {
checktimeout(outtime);
} catch (TimeOutException e) {
e.printStackTrace();
}
}
};
Thread ts=new Thread(r,"timeoutcheck");
ts.start();
}
protected void checktimeout(int outertime) throws TimeOutException {
try {
Thread.sleep(outertime);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(!isfinished)
throw new TimeOutException();
}

public void a(int time) throws TimeOutException {
timeout(outTime);
try {
Thread.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
isfinished=true;
}

//测试代码:
public static void main(String[] args) {
A a=new A();
a.outTime=5000;
try {
a.a(4000);
} catch (TimeOutException e) {
e.printStackTrace();
}
}
}

上段代码还是没有实现a()抛出异常,需要对代码做一下改变。

定义一个定时器类,这个方法入口时启动,超时了定时器throw TimeOutException

好像这个TimeOutException得从runtimeException继承

问题的类型的需要调用另外一个线程来计时,而外线程的异常要通知本线程,不知道有哪种方式可以实现。