您需要两个线程之间的一些同步机制。以下是我为此使用CountDownLatch
的一个示例。我定义了一个SyncedThread
类,它在构造函数中传入一个CountDownLatch
。
在主要方法中,我创建了这个类的两个实例。首先,thread1
将运行2秒钟,然后发出CountDownLatch信号,然后再进行一次虚拟睡眠3秒。 第二个实例thread2
将等待CountDownLatch,然后将休眠5秒模拟工作。
thread2.start()
方法首先被调用,然后用thread1.start()
500毫秒的延迟,但通过使用synchronisatio你会在实际thread2
等待thread1
输出中看到。
public class ThreadStarterTest {
public static void main(String[] args) {
final CountDownLatch latch = new CountDownLatch(1);
SyncedThread thread1 = new SyncedThread(latch, "thread 1") {
@Override
public void run() {
try {
System.out.println(getName() + " running");
Thread.sleep(2_000);
latch.countDown();
Thread.sleep(3_000);
System.out.println(getName() + " finished");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
SyncedThread thread2 = new SyncedThread(latch, "thread 2") {
@Override
public void run() {
try {
latch.await();
System.out.println(getName() + " running");
Thread.sleep(5_000);
System.out.println(getName() + " finished");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
try {
thread2.start();
Thread.sleep(500);
thread1.start();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static class SyncedThread extends Thread {
private final CountDownLatch latch;
public SyncedThread(final CountDownLatch latch, final String name) {
super(name);
this.latch = latch;
}
}
}