![](/img/trans.png)
[英]How to run three threads simultaneously with different sleep time in a while loop?
[英]run two threads simultaneously with different sleep times
我有一种情况每分钟运行thread1和每小时运行thread2。 我怎样才能做到这一点。
目前我有一个工作代码,每分钟后运行thread1。
主要方法
static void main(string args[]){
orderListner thread1 = new orderListner();
thread1.start();
}
线程1
public static void orderListner extends thread{
public void run(){
while(true){
process();
thread.sleep(60000);
}
}
}
现在我需要为每小时后运行的结果启动新线程。 我如何同时实现这一点(thread1将连续运行thread2应该每小时启动一次)
我建议您使用ScheduledExecutorService
来集中这些任务。
public final class ScheduledExecutorServiceDemo {
private static final ScheduledExecutorService exec =
Executors.newScheduledThreadPool(2);
public static void main(String[] args){
// Schedule first task
exec.scheduleAtFixedRate(new Runnable(){
@Override
public void run() {
// do stuff
}}, 0, 1, TimeUnit.MINUTES);
// Schedule second task
exec.scheduleAtFixedRate(new Runnable(){
@Override
public void run() {
// do stuff
}}, 0, 1, TimeUnit.HOURS);
}
}
到目前为止做得好! :)
你可以再做一次。 我的意思是你创建一个代表你的第二个线程的新类(我们可以调用这个类SecondListener
)。 它应该看起来像OrderListener
,但是睡眠时间应该改为1小时。
然后你只需修改你的main方法,以便它创建一个SecondListener类的对象,并启动线程,就像你使用OrderListener一样。
如果重要的是SecondListener不运行它直到一小时后才运行,你可以在SecondListener中的进程之前执行sleep。
最后一个关于睡眠时间的小建议:为了便于阅读,将它们表达为方程式。 因此,而不是60000,键入1000 * 60.而不是3600000类型1000 * 60 * 60 :)
使用线程类的更好方法是创建一个实现Runnable而不是扩展线程的对象。 如果您不想创建另一个文件,只需创建一个匿名类。 (尽可能避免使用继承是一种好习惯。)
话虽如此,只需创建一个小时运行的新线程并启动它。 我将使用你的线程方法代替。
static void main(string args[]){
orderListner thread1 = new orderListner();
orderListner2 thread2 = new orderListner2();
thread1.start;
thread2.start;
}
线程1是相同的,线程2是
public static void orderListner2 extends thread{
void run(){
while(true){
process();
thread.sleep(3600000);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.