[英]Android: Standard way to make a thread run every second
I'm trying to run a Thread
class every second. 我试图每秒运行一个Thread
类。 I cant use Runnable
. 我不能使用Runnable
。 I tried in the following way, but its throwing StackOverflowException
. 我以下面的方式尝试了,但是它抛出了StackOverflowException
。 Can anyone please let me know a standard method to make a thread class run every second. 任何人都可以让我知道使线程类每秒运行一次的标准方法。
public class A extends Thread {
public void run() {
//do my stuff
sleep(1*1000,0);
run();
}
}
Use Timer
's schedule()
or scheduleAtFixedRate()
( difference between these two ) with TimerTask
in the first argument, in which you are overriding the run()
method. 将Timer
的schedule()
或scheduleAtFixedRate()
( 这两者之间的区别 )与TimerTask
在第一个参数中,在该参数中您要覆盖run()
方法。
Example: 例:
Timer timer = new Timer();
timer.schedule(new TimerTask()
{
@Override
public void run()
{
// TODO do your thing
}
}, 0, 1000);
Your example causes stack overflow, because it's infinite recursion, you are always calling run()
from run()
. 你的榜样导致堆栈溢出,因为它是无穷递归,你总是调用run()
自run()
Maybe you want to consider an alternative like ScheduledExecutorService 也许您想考虑诸如ScheduledExecutorService之类的替代方案
ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);
/*This schedules a runnable task every second*/
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
public void run() {
DoWhateverYouWant();
}
}, 0, 1, TimeUnit.SECONDS);
final ExecutorService es = Executors.newCachedThreadPool();
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(new Runnable()
{
@Override
public void run()
{
es.submit(new Runnable()
{
@Override
public void run()
{
// do your work here
}
});
}
}, 0, 1, TimeUnit.SECONDS);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.