gpt4 book ai didi

java - 如何在 while 循环中同时运行三个具有不同 sleep 时间的线程?

转载 作者:行者123 更新时间:2023-12-02 03:41:49 25 4
gpt4 key购买 nike

我想在一个 while 循环中同时运行三个不同的线程,并具有不同的等待时间。这是我的示例代码。

static void someFunction(){

while(true){

Thread t1 = new Thread(){
public void run(){
System.out.println("Thread 1");
try {
Thread.currentThread();
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};

Thread t2 = new Thread(){
public void run(){
System.out.println("Thread 2");
try {
Thread.currentThread();
Thread.sleep(7000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};

Thread t3 = new Thread(){
public void run(){
System.out.println("Thread 3");
try {
Thread.currentThread();
Thread.sleep(8000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};


}

}

是否可以在 while 循环中同时运行三个线程?还有其他方法可以实现吗?

预期输出:线程1线程2线程3线程 1(5 秒后)线程2(7秒后)线程3(8秒后)

最佳答案

您无法从线程的 run() 方法(或其 run() 方法调用的代码)外部控制线程中的执行。外循环不是做你想做的事的方式。它只会无休止地生成新线程。

由于除了消息和延迟之外,线程都是相同的,因此这是将这些数据放入变量并具有单段代码的完美情况:

public class MyThread extends Thread {
private final long interval;
private final String message;
public MyThread(long interval, String message) {
this.interval = interval;
this.message = message;
}

@Override
public void run() {
while (!isInterrupted()) {
System.out.println(message);
try {
sleep(interval);
} catch (InterruptedException e) {
return;
}
}
}
}

请注意,我已将 while(true) 替换为 while(!isInterrupted())。这是为您提供一种有序终止线程的方法:只需中断它们即可。

您使用它的方式可能是:

static Thread t1, t2, t3;

static void someFunction() {
t1 = new MyThread(5000, "Thread 1");
t2 = new MyThread(7000, "Thread 2");
t3 = new MyThread(8000, "Thread 3");
// now start them all
t1.start();
t2.start();
t3.start();
}

当您希望线程结束时,只需调用:

t1.interrupt();
t2.interrupt();
t3.interrupt();

您可能还想考虑使用ThreadGroup。这是一种将线程集合作为单个组进行处理(令人惊讶!)的便捷方法。

关于java - 如何在 while 循环中同时运行三个具有不同 sleep 时间的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36757597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com