当我写一个帖子时,我有一个想法。我在考虑类似的事情:
class myThread extends Thread {
public void run(){
if(condition){
//doSomething
} else {
sleep(10000);
run();
}
}
}
我可以这样做吗?我确信这不是一个好的编码风格,但还有什么可以反对这个吗?
答案 0 :(得分:0)
你冒着StackOverflowError
这样做的风险,因为堆栈只会增长,直到不再满足条件。非递归地执行此操作更简单。
public void run() {
while(condition) {
doSomething();
}
}
答案 1 :(得分:0)
只需使用无限循环和volatile
布尔标志。您也可以从线程外部更新flag
以随时退出线程(停止线程)。
class myThread extends Thread {
private volatile boolean flag;
public void run(){
while(flag){
if(condition){
flag = false;
break;
}
//doSomething
}
}
}
答案 2 :(得分:0)
从技术上讲,没有人反对从内部递归调用run()
。不过,我建议将代码移动到Runnable
然后由线程运行,因为它是设计为子类Thread
和覆盖run
以实现的不好的设计任务:
public class MyTask implements Runnable {
public void run() {
// ...
run(); // recursive call
// ...
}
}
// somewhere else:
Thread thread = new Thread(new MyTask());
thread.start();
// or even better:
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(new MyTask());