我希望在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 Thread3 Thread1(5 SEC之后) 线程2(7秒后) Thread3(8秒后)
答案 0 :(得分:2)
您无法控制线程的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
。这是一种处理线程集合的便捷方式(惊喜!)一个组。